1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2012 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker *
4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker */
10*fb1b10abSAndroid Build Coastguard Worker
11*fb1b10abSAndroid Build Coastguard Worker #include <stdio.h>
12*fb1b10abSAndroid Build Coastguard Worker #include <string.h>
13*fb1b10abSAndroid Build Coastguard Worker #include <limits.h>
14*fb1b10abSAndroid Build Coastguard Worker
15*fb1b10abSAndroid Build Coastguard Worker #include "gtest/gtest.h"
16*fb1b10abSAndroid Build Coastguard Worker
17*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_config.h"
18*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_dsp_rtcd.h"
19*fb1b10abSAndroid Build Coastguard Worker #include "test/acm_random.h"
20*fb1b10abSAndroid Build Coastguard Worker #include "test/bench.h"
21*fb1b10abSAndroid Build Coastguard Worker #include "test/clear_system_state.h"
22*fb1b10abSAndroid Build Coastguard Worker #include "test/register_state_check.h"
23*fb1b10abSAndroid Build Coastguard Worker #include "test/util.h"
24*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vpx_codec.h"
25*fb1b10abSAndroid Build Coastguard Worker #include "vpx_mem/vpx_mem.h"
26*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/mem.h"
27*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/vpx_timer.h"
28*fb1b10abSAndroid Build Coastguard Worker
29*fb1b10abSAndroid Build Coastguard Worker // const[expr] should be sufficient for DECLARE_ALIGNED but early
30*fb1b10abSAndroid Build Coastguard Worker // implementations of c++11 appear to have some issues with it.
31*fb1b10abSAndroid Build Coastguard Worker #define kDataAlignment 32
32*fb1b10abSAndroid Build Coastguard Worker
33*fb1b10abSAndroid Build Coastguard Worker template <typename Function>
34*fb1b10abSAndroid Build Coastguard Worker struct TestParams {
TestParamsTestParams35*fb1b10abSAndroid Build Coastguard Worker TestParams(int w, int h, Function f, int bd = -1)
36*fb1b10abSAndroid Build Coastguard Worker : width(w), height(h), bit_depth(bd), func(f) {}
37*fb1b10abSAndroid Build Coastguard Worker int width, height, bit_depth;
38*fb1b10abSAndroid Build Coastguard Worker Function func;
39*fb1b10abSAndroid Build Coastguard Worker };
40*fb1b10abSAndroid Build Coastguard Worker
41*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*SadMxNFunc)(const uint8_t *src_ptr, int src_stride,
42*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride);
43*fb1b10abSAndroid Build Coastguard Worker typedef TestParams<SadMxNFunc> SadMxNParam;
44*fb1b10abSAndroid Build Coastguard Worker
45*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*SadSkipMxNFunc)(const uint8_t *src_ptr, int src_stride,
46*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride);
47*fb1b10abSAndroid Build Coastguard Worker typedef TestParams<SadSkipMxNFunc> SadSkipMxNParam;
48*fb1b10abSAndroid Build Coastguard Worker
49*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*SadMxNAvgFunc)(const uint8_t *src_ptr, int src_stride,
50*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride,
51*fb1b10abSAndroid Build Coastguard Worker const uint8_t *second_pred);
52*fb1b10abSAndroid Build Coastguard Worker typedef TestParams<SadMxNAvgFunc> SadMxNAvgParam;
53*fb1b10abSAndroid Build Coastguard Worker
54*fb1b10abSAndroid Build Coastguard Worker typedef void (*SadMxNx4Func)(const uint8_t *src_ptr, int src_stride,
55*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const ref_ptr[], int ref_stride,
56*fb1b10abSAndroid Build Coastguard Worker unsigned int *sad_array);
57*fb1b10abSAndroid Build Coastguard Worker typedef TestParams<SadMxNx4Func> SadMxNx4Param;
58*fb1b10abSAndroid Build Coastguard Worker
59*fb1b10abSAndroid Build Coastguard Worker typedef void (*SadSkipMxNx4Func)(const uint8_t *src_ptr, int src_stride,
60*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const ref_ptr[], int ref_stride,
61*fb1b10abSAndroid Build Coastguard Worker unsigned int *sad_array);
62*fb1b10abSAndroid Build Coastguard Worker typedef TestParams<SadSkipMxNx4Func> SadSkipMxNx4Param;
63*fb1b10abSAndroid Build Coastguard Worker
64*fb1b10abSAndroid Build Coastguard Worker typedef void (*SadMxNx8Func)(const uint8_t *src_ptr, int src_stride,
65*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride,
66*fb1b10abSAndroid Build Coastguard Worker unsigned int *sad_array);
67*fb1b10abSAndroid Build Coastguard Worker
68*fb1b10abSAndroid Build Coastguard Worker using libvpx_test::ACMRandom;
69*fb1b10abSAndroid Build Coastguard Worker
70*fb1b10abSAndroid Build Coastguard Worker namespace {
71*fb1b10abSAndroid Build Coastguard Worker template <typename ParamType>
72*fb1b10abSAndroid Build Coastguard Worker class SADTestBase : public ::testing::TestWithParam<ParamType> {
73*fb1b10abSAndroid Build Coastguard Worker public:
SADTestBase(const ParamType & params)74*fb1b10abSAndroid Build Coastguard Worker explicit SADTestBase(const ParamType ¶ms) : params_(params) {}
75*fb1b10abSAndroid Build Coastguard Worker
SetUp()76*fb1b10abSAndroid Build Coastguard Worker void SetUp() override {
77*fb1b10abSAndroid Build Coastguard Worker source_data8_ = reinterpret_cast<uint8_t *>(
78*fb1b10abSAndroid Build Coastguard Worker vpx_memalign(kDataAlignment, kDataBlockSize));
79*fb1b10abSAndroid Build Coastguard Worker reference_data8_ = reinterpret_cast<uint8_t *>(
80*fb1b10abSAndroid Build Coastguard Worker vpx_memalign(kDataAlignment, kDataBufferSize));
81*fb1b10abSAndroid Build Coastguard Worker second_pred8_ =
82*fb1b10abSAndroid Build Coastguard Worker reinterpret_cast<uint8_t *>(vpx_memalign(kDataAlignment, 64 * 64));
83*fb1b10abSAndroid Build Coastguard Worker source_data16_ = reinterpret_cast<uint16_t *>(
84*fb1b10abSAndroid Build Coastguard Worker vpx_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
85*fb1b10abSAndroid Build Coastguard Worker reference_data16_ = reinterpret_cast<uint16_t *>(
86*fb1b10abSAndroid Build Coastguard Worker vpx_memalign(kDataAlignment, kDataBufferSize * sizeof(uint16_t)));
87*fb1b10abSAndroid Build Coastguard Worker second_pred16_ = reinterpret_cast<uint16_t *>(
88*fb1b10abSAndroid Build Coastguard Worker vpx_memalign(kDataAlignment, 64 * 64 * sizeof(uint16_t)));
89*fb1b10abSAndroid Build Coastguard Worker
90*fb1b10abSAndroid Build Coastguard Worker if (params_.bit_depth == -1) {
91*fb1b10abSAndroid Build Coastguard Worker use_high_bit_depth_ = false;
92*fb1b10abSAndroid Build Coastguard Worker bit_depth_ = VPX_BITS_8;
93*fb1b10abSAndroid Build Coastguard Worker source_data_ = source_data8_;
94*fb1b10abSAndroid Build Coastguard Worker reference_data_ = reference_data8_;
95*fb1b10abSAndroid Build Coastguard Worker second_pred_ = second_pred8_;
96*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
97*fb1b10abSAndroid Build Coastguard Worker } else {
98*fb1b10abSAndroid Build Coastguard Worker use_high_bit_depth_ = true;
99*fb1b10abSAndroid Build Coastguard Worker bit_depth_ = static_cast<vpx_bit_depth_t>(params_.bit_depth);
100*fb1b10abSAndroid Build Coastguard Worker source_data_ = CONVERT_TO_BYTEPTR(source_data16_);
101*fb1b10abSAndroid Build Coastguard Worker reference_data_ = CONVERT_TO_BYTEPTR(reference_data16_);
102*fb1b10abSAndroid Build Coastguard Worker second_pred_ = CONVERT_TO_BYTEPTR(second_pred16_);
103*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
104*fb1b10abSAndroid Build Coastguard Worker }
105*fb1b10abSAndroid Build Coastguard Worker mask_ = (1 << bit_depth_) - 1;
106*fb1b10abSAndroid Build Coastguard Worker source_stride_ = (params_.width + 63) & ~63;
107*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = params_.width * 2;
108*fb1b10abSAndroid Build Coastguard Worker rnd_.Reset(ACMRandom::DeterministicSeed());
109*fb1b10abSAndroid Build Coastguard Worker }
110*fb1b10abSAndroid Build Coastguard Worker
TearDown()111*fb1b10abSAndroid Build Coastguard Worker void TearDown() override {
112*fb1b10abSAndroid Build Coastguard Worker vpx_free(source_data8_);
113*fb1b10abSAndroid Build Coastguard Worker source_data8_ = nullptr;
114*fb1b10abSAndroid Build Coastguard Worker vpx_free(reference_data8_);
115*fb1b10abSAndroid Build Coastguard Worker reference_data8_ = nullptr;
116*fb1b10abSAndroid Build Coastguard Worker vpx_free(second_pred8_);
117*fb1b10abSAndroid Build Coastguard Worker second_pred8_ = nullptr;
118*fb1b10abSAndroid Build Coastguard Worker vpx_free(source_data16_);
119*fb1b10abSAndroid Build Coastguard Worker source_data16_ = nullptr;
120*fb1b10abSAndroid Build Coastguard Worker vpx_free(reference_data16_);
121*fb1b10abSAndroid Build Coastguard Worker reference_data16_ = nullptr;
122*fb1b10abSAndroid Build Coastguard Worker vpx_free(second_pred16_);
123*fb1b10abSAndroid Build Coastguard Worker second_pred16_ = nullptr;
124*fb1b10abSAndroid Build Coastguard Worker
125*fb1b10abSAndroid Build Coastguard Worker libvpx_test::ClearSystemState();
126*fb1b10abSAndroid Build Coastguard Worker }
127*fb1b10abSAndroid Build Coastguard Worker
128*fb1b10abSAndroid Build Coastguard Worker protected:
129*fb1b10abSAndroid Build Coastguard Worker // Handle blocks up to 4 blocks 64x64 with stride up to 128
130*fb1b10abSAndroid Build Coastguard Worker // crbug.com/webm/1660
131*fb1b10abSAndroid Build Coastguard Worker static const int kDataBlockSize = 64 * 128;
132*fb1b10abSAndroid Build Coastguard Worker static const int kDataBufferSize = 4 * kDataBlockSize;
133*fb1b10abSAndroid Build Coastguard Worker
GetBlockRefOffset(int block_idx) const134*fb1b10abSAndroid Build Coastguard Worker int GetBlockRefOffset(int block_idx) const {
135*fb1b10abSAndroid Build Coastguard Worker return block_idx * kDataBlockSize;
136*fb1b10abSAndroid Build Coastguard Worker }
137*fb1b10abSAndroid Build Coastguard Worker
GetReferenceFromOffset(int ref_offset) const138*fb1b10abSAndroid Build Coastguard Worker uint8_t *GetReferenceFromOffset(int ref_offset) const {
139*fb1b10abSAndroid Build Coastguard Worker assert((params_.height - 1) * reference_stride_ + params_.width - 1 +
140*fb1b10abSAndroid Build Coastguard Worker ref_offset <
141*fb1b10abSAndroid Build Coastguard Worker kDataBufferSize);
142*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
143*fb1b10abSAndroid Build Coastguard Worker if (use_high_bit_depth_) {
144*fb1b10abSAndroid Build Coastguard Worker return CONVERT_TO_BYTEPTR(CONVERT_TO_SHORTPTR(reference_data_) +
145*fb1b10abSAndroid Build Coastguard Worker ref_offset);
146*fb1b10abSAndroid Build Coastguard Worker }
147*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
148*fb1b10abSAndroid Build Coastguard Worker return reference_data_ + ref_offset;
149*fb1b10abSAndroid Build Coastguard Worker }
150*fb1b10abSAndroid Build Coastguard Worker
GetReference(int block_idx) const151*fb1b10abSAndroid Build Coastguard Worker uint8_t *GetReference(int block_idx) const {
152*fb1b10abSAndroid Build Coastguard Worker return GetReferenceFromOffset(GetBlockRefOffset(block_idx));
153*fb1b10abSAndroid Build Coastguard Worker }
154*fb1b10abSAndroid Build Coastguard Worker
155*fb1b10abSAndroid Build Coastguard Worker // Sum of Absolute Differences. Given two blocks, calculate the absolute
156*fb1b10abSAndroid Build Coastguard Worker // difference between two pixels in the same relative location; accumulate.
ReferenceSAD(int ref_offset) const157*fb1b10abSAndroid Build Coastguard Worker uint32_t ReferenceSAD(int ref_offset) const {
158*fb1b10abSAndroid Build Coastguard Worker uint32_t sad = 0;
159*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const reference8 = GetReferenceFromOffset(ref_offset);
160*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const source8 = source_data_;
161*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
162*fb1b10abSAndroid Build Coastguard Worker const uint16_t *const reference16 =
163*fb1b10abSAndroid Build Coastguard Worker CONVERT_TO_SHORTPTR(GetReferenceFromOffset(ref_offset));
164*fb1b10abSAndroid Build Coastguard Worker const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
165*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
166*fb1b10abSAndroid Build Coastguard Worker for (int h = 0; h < params_.height; ++h) {
167*fb1b10abSAndroid Build Coastguard Worker for (int w = 0; w < params_.width; ++w) {
168*fb1b10abSAndroid Build Coastguard Worker if (!use_high_bit_depth_) {
169*fb1b10abSAndroid Build Coastguard Worker sad += abs(source8[h * source_stride_ + w] -
170*fb1b10abSAndroid Build Coastguard Worker reference8[h * reference_stride_ + w]);
171*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
172*fb1b10abSAndroid Build Coastguard Worker } else {
173*fb1b10abSAndroid Build Coastguard Worker sad += abs(source16[h * source_stride_ + w] -
174*fb1b10abSAndroid Build Coastguard Worker reference16[h * reference_stride_ + w]);
175*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
176*fb1b10abSAndroid Build Coastguard Worker }
177*fb1b10abSAndroid Build Coastguard Worker }
178*fb1b10abSAndroid Build Coastguard Worker }
179*fb1b10abSAndroid Build Coastguard Worker return sad;
180*fb1b10abSAndroid Build Coastguard Worker }
181*fb1b10abSAndroid Build Coastguard Worker
182*fb1b10abSAndroid Build Coastguard Worker // Sum of Absolute Differences Skip rows. Given two blocks, calculate the
183*fb1b10abSAndroid Build Coastguard Worker // absolute difference between two pixels in the same relative location every
184*fb1b10abSAndroid Build Coastguard Worker // other row; accumulate and double the result at the end.
ReferenceSADSkip(int ref_offset) const185*fb1b10abSAndroid Build Coastguard Worker uint32_t ReferenceSADSkip(int ref_offset) const {
186*fb1b10abSAndroid Build Coastguard Worker uint32_t sad = 0;
187*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const reference8 = GetReferenceFromOffset(ref_offset);
188*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const source8 = source_data_;
189*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
190*fb1b10abSAndroid Build Coastguard Worker const uint16_t *const reference16 =
191*fb1b10abSAndroid Build Coastguard Worker CONVERT_TO_SHORTPTR(GetReferenceFromOffset(ref_offset));
192*fb1b10abSAndroid Build Coastguard Worker const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
193*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
194*fb1b10abSAndroid Build Coastguard Worker for (int h = 0; h < params_.height; h += 2) {
195*fb1b10abSAndroid Build Coastguard Worker for (int w = 0; w < params_.width; ++w) {
196*fb1b10abSAndroid Build Coastguard Worker if (!use_high_bit_depth_) {
197*fb1b10abSAndroid Build Coastguard Worker sad += abs(source8[h * source_stride_ + w] -
198*fb1b10abSAndroid Build Coastguard Worker reference8[h * reference_stride_ + w]);
199*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
200*fb1b10abSAndroid Build Coastguard Worker } else {
201*fb1b10abSAndroid Build Coastguard Worker sad += abs(source16[h * source_stride_ + w] -
202*fb1b10abSAndroid Build Coastguard Worker reference16[h * reference_stride_ + w]);
203*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
204*fb1b10abSAndroid Build Coastguard Worker }
205*fb1b10abSAndroid Build Coastguard Worker }
206*fb1b10abSAndroid Build Coastguard Worker }
207*fb1b10abSAndroid Build Coastguard Worker return sad * 2;
208*fb1b10abSAndroid Build Coastguard Worker }
209*fb1b10abSAndroid Build Coastguard Worker
210*fb1b10abSAndroid Build Coastguard Worker // Sum of Absolute Differences Average. Given two blocks, and a prediction
211*fb1b10abSAndroid Build Coastguard Worker // calculate the absolute difference between one pixel and average of the
212*fb1b10abSAndroid Build Coastguard Worker // corresponding and predicted pixels; accumulate.
ReferenceSADavg(int block_idx) const213*fb1b10abSAndroid Build Coastguard Worker unsigned int ReferenceSADavg(int block_idx) const {
214*fb1b10abSAndroid Build Coastguard Worker unsigned int sad = 0;
215*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const reference8 = GetReference(block_idx);
216*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const source8 = source_data_;
217*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const second_pred8 = second_pred_;
218*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
219*fb1b10abSAndroid Build Coastguard Worker const uint16_t *const reference16 =
220*fb1b10abSAndroid Build Coastguard Worker CONVERT_TO_SHORTPTR(GetReference(block_idx));
221*fb1b10abSAndroid Build Coastguard Worker const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
222*fb1b10abSAndroid Build Coastguard Worker const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
223*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
224*fb1b10abSAndroid Build Coastguard Worker for (int h = 0; h < params_.height; ++h) {
225*fb1b10abSAndroid Build Coastguard Worker for (int w = 0; w < params_.width; ++w) {
226*fb1b10abSAndroid Build Coastguard Worker if (!use_high_bit_depth_) {
227*fb1b10abSAndroid Build Coastguard Worker const int tmp = second_pred8[h * params_.width + w] +
228*fb1b10abSAndroid Build Coastguard Worker reference8[h * reference_stride_ + w];
229*fb1b10abSAndroid Build Coastguard Worker const uint8_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
230*fb1b10abSAndroid Build Coastguard Worker sad += abs(source8[h * source_stride_ + w] - comp_pred);
231*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
232*fb1b10abSAndroid Build Coastguard Worker } else {
233*fb1b10abSAndroid Build Coastguard Worker const int tmp = second_pred16[h * params_.width + w] +
234*fb1b10abSAndroid Build Coastguard Worker reference16[h * reference_stride_ + w];
235*fb1b10abSAndroid Build Coastguard Worker const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
236*fb1b10abSAndroid Build Coastguard Worker sad += abs(source16[h * source_stride_ + w] - comp_pred);
237*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
238*fb1b10abSAndroid Build Coastguard Worker }
239*fb1b10abSAndroid Build Coastguard Worker }
240*fb1b10abSAndroid Build Coastguard Worker }
241*fb1b10abSAndroid Build Coastguard Worker return sad;
242*fb1b10abSAndroid Build Coastguard Worker }
243*fb1b10abSAndroid Build Coastguard Worker
FillConstant(uint8_t * data,int stride,uint16_t fill_constant) const244*fb1b10abSAndroid Build Coastguard Worker void FillConstant(uint8_t *data, int stride, uint16_t fill_constant) const {
245*fb1b10abSAndroid Build Coastguard Worker uint8_t *data8 = data;
246*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
247*fb1b10abSAndroid Build Coastguard Worker uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
248*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
249*fb1b10abSAndroid Build Coastguard Worker for (int h = 0; h < params_.height; ++h) {
250*fb1b10abSAndroid Build Coastguard Worker for (int w = 0; w < params_.width; ++w) {
251*fb1b10abSAndroid Build Coastguard Worker if (!use_high_bit_depth_) {
252*fb1b10abSAndroid Build Coastguard Worker data8[h * stride + w] = static_cast<uint8_t>(fill_constant);
253*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
254*fb1b10abSAndroid Build Coastguard Worker } else {
255*fb1b10abSAndroid Build Coastguard Worker data16[h * stride + w] = fill_constant;
256*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
257*fb1b10abSAndroid Build Coastguard Worker }
258*fb1b10abSAndroid Build Coastguard Worker }
259*fb1b10abSAndroid Build Coastguard Worker }
260*fb1b10abSAndroid Build Coastguard Worker }
261*fb1b10abSAndroid Build Coastguard Worker
FillRandomWH(uint8_t * data,int stride,int w,int h)262*fb1b10abSAndroid Build Coastguard Worker void FillRandomWH(uint8_t *data, int stride, int w, int h) {
263*fb1b10abSAndroid Build Coastguard Worker uint8_t *data8 = data;
264*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
265*fb1b10abSAndroid Build Coastguard Worker uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
266*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
267*fb1b10abSAndroid Build Coastguard Worker for (int r = 0; r < h; ++r) {
268*fb1b10abSAndroid Build Coastguard Worker for (int c = 0; c < w; ++c) {
269*fb1b10abSAndroid Build Coastguard Worker if (!use_high_bit_depth_) {
270*fb1b10abSAndroid Build Coastguard Worker data8[r * stride + c] = rnd_.Rand8();
271*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
272*fb1b10abSAndroid Build Coastguard Worker } else {
273*fb1b10abSAndroid Build Coastguard Worker data16[r * stride + c] = rnd_.Rand16() & mask_;
274*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
275*fb1b10abSAndroid Build Coastguard Worker }
276*fb1b10abSAndroid Build Coastguard Worker }
277*fb1b10abSAndroid Build Coastguard Worker }
278*fb1b10abSAndroid Build Coastguard Worker }
279*fb1b10abSAndroid Build Coastguard Worker
FillRandom(uint8_t * data,int stride)280*fb1b10abSAndroid Build Coastguard Worker void FillRandom(uint8_t *data, int stride) {
281*fb1b10abSAndroid Build Coastguard Worker FillRandomWH(data, stride, params_.width, params_.height);
282*fb1b10abSAndroid Build Coastguard Worker }
283*fb1b10abSAndroid Build Coastguard Worker
284*fb1b10abSAndroid Build Coastguard Worker uint32_t mask_;
285*fb1b10abSAndroid Build Coastguard Worker vpx_bit_depth_t bit_depth_;
286*fb1b10abSAndroid Build Coastguard Worker int source_stride_;
287*fb1b10abSAndroid Build Coastguard Worker int reference_stride_;
288*fb1b10abSAndroid Build Coastguard Worker bool use_high_bit_depth_;
289*fb1b10abSAndroid Build Coastguard Worker
290*fb1b10abSAndroid Build Coastguard Worker uint8_t *source_data_;
291*fb1b10abSAndroid Build Coastguard Worker uint8_t *reference_data_;
292*fb1b10abSAndroid Build Coastguard Worker uint8_t *second_pred_;
293*fb1b10abSAndroid Build Coastguard Worker uint8_t *source_data8_;
294*fb1b10abSAndroid Build Coastguard Worker uint8_t *reference_data8_;
295*fb1b10abSAndroid Build Coastguard Worker uint8_t *second_pred8_;
296*fb1b10abSAndroid Build Coastguard Worker uint16_t *source_data16_;
297*fb1b10abSAndroid Build Coastguard Worker uint16_t *reference_data16_;
298*fb1b10abSAndroid Build Coastguard Worker uint16_t *second_pred16_;
299*fb1b10abSAndroid Build Coastguard Worker
300*fb1b10abSAndroid Build Coastguard Worker ACMRandom rnd_;
301*fb1b10abSAndroid Build Coastguard Worker ParamType params_;
302*fb1b10abSAndroid Build Coastguard Worker };
303*fb1b10abSAndroid Build Coastguard Worker
304*fb1b10abSAndroid Build Coastguard Worker class SADx4Test : public SADTestBase<SadMxNx4Param> {
305*fb1b10abSAndroid Build Coastguard Worker public:
SADx4Test()306*fb1b10abSAndroid Build Coastguard Worker SADx4Test() : SADTestBase(GetParam()) {}
307*fb1b10abSAndroid Build Coastguard Worker
308*fb1b10abSAndroid Build Coastguard Worker protected:
SADs(unsigned int * results) const309*fb1b10abSAndroid Build Coastguard Worker void SADs(unsigned int *results) const {
310*fb1b10abSAndroid Build Coastguard Worker const uint8_t *references[] = { GetReference(0), GetReference(1),
311*fb1b10abSAndroid Build Coastguard Worker GetReference(2), GetReference(3) };
312*fb1b10abSAndroid Build Coastguard Worker
313*fb1b10abSAndroid Build Coastguard Worker ASM_REGISTER_STATE_CHECK(params_.func(
314*fb1b10abSAndroid Build Coastguard Worker source_data_, source_stride_, references, reference_stride_, results));
315*fb1b10abSAndroid Build Coastguard Worker }
316*fb1b10abSAndroid Build Coastguard Worker
CheckSADs() const317*fb1b10abSAndroid Build Coastguard Worker void CheckSADs() const {
318*fb1b10abSAndroid Build Coastguard Worker uint32_t reference_sad;
319*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(kDataAlignment, uint32_t, exp_sad[4]);
320*fb1b10abSAndroid Build Coastguard Worker
321*fb1b10abSAndroid Build Coastguard Worker SADs(exp_sad);
322*fb1b10abSAndroid Build Coastguard Worker for (int block = 0; block < 4; ++block) {
323*fb1b10abSAndroid Build Coastguard Worker reference_sad = ReferenceSAD(GetBlockRefOffset(block));
324*fb1b10abSAndroid Build Coastguard Worker
325*fb1b10abSAndroid Build Coastguard Worker EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
326*fb1b10abSAndroid Build Coastguard Worker }
327*fb1b10abSAndroid Build Coastguard Worker }
328*fb1b10abSAndroid Build Coastguard Worker };
329*fb1b10abSAndroid Build Coastguard Worker
330*fb1b10abSAndroid Build Coastguard Worker class SADSkipx4Test : public SADTestBase<SadMxNx4Param> {
331*fb1b10abSAndroid Build Coastguard Worker public:
SADSkipx4Test()332*fb1b10abSAndroid Build Coastguard Worker SADSkipx4Test() : SADTestBase(GetParam()) {}
333*fb1b10abSAndroid Build Coastguard Worker
334*fb1b10abSAndroid Build Coastguard Worker protected:
SADs(unsigned int * results) const335*fb1b10abSAndroid Build Coastguard Worker void SADs(unsigned int *results) const {
336*fb1b10abSAndroid Build Coastguard Worker const uint8_t *references[] = { GetReference(0), GetReference(1),
337*fb1b10abSAndroid Build Coastguard Worker GetReference(2), GetReference(3) };
338*fb1b10abSAndroid Build Coastguard Worker
339*fb1b10abSAndroid Build Coastguard Worker ASM_REGISTER_STATE_CHECK(params_.func(
340*fb1b10abSAndroid Build Coastguard Worker source_data_, source_stride_, references, reference_stride_, results));
341*fb1b10abSAndroid Build Coastguard Worker }
342*fb1b10abSAndroid Build Coastguard Worker
CheckSADs() const343*fb1b10abSAndroid Build Coastguard Worker void CheckSADs() const {
344*fb1b10abSAndroid Build Coastguard Worker uint32_t reference_sad;
345*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(kDataAlignment, uint32_t, exp_sad[4]);
346*fb1b10abSAndroid Build Coastguard Worker
347*fb1b10abSAndroid Build Coastguard Worker SADs(exp_sad);
348*fb1b10abSAndroid Build Coastguard Worker for (int block = 0; block < 4; ++block) {
349*fb1b10abSAndroid Build Coastguard Worker reference_sad = ReferenceSADSkip(GetBlockRefOffset(block));
350*fb1b10abSAndroid Build Coastguard Worker
351*fb1b10abSAndroid Build Coastguard Worker EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
352*fb1b10abSAndroid Build Coastguard Worker }
353*fb1b10abSAndroid Build Coastguard Worker }
354*fb1b10abSAndroid Build Coastguard Worker };
355*fb1b10abSAndroid Build Coastguard Worker
356*fb1b10abSAndroid Build Coastguard Worker class SADTest : public AbstractBench, public SADTestBase<SadMxNParam> {
357*fb1b10abSAndroid Build Coastguard Worker public:
SADTest()358*fb1b10abSAndroid Build Coastguard Worker SADTest() : SADTestBase(GetParam()) {}
359*fb1b10abSAndroid Build Coastguard Worker
360*fb1b10abSAndroid Build Coastguard Worker protected:
SAD(int block_idx) const361*fb1b10abSAndroid Build Coastguard Worker unsigned int SAD(int block_idx) const {
362*fb1b10abSAndroid Build Coastguard Worker unsigned int ret;
363*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const reference = GetReference(block_idx);
364*fb1b10abSAndroid Build Coastguard Worker
365*fb1b10abSAndroid Build Coastguard Worker ASM_REGISTER_STATE_CHECK(ret = params_.func(source_data_, source_stride_,
366*fb1b10abSAndroid Build Coastguard Worker reference, reference_stride_));
367*fb1b10abSAndroid Build Coastguard Worker return ret;
368*fb1b10abSAndroid Build Coastguard Worker }
369*fb1b10abSAndroid Build Coastguard Worker
CheckSAD() const370*fb1b10abSAndroid Build Coastguard Worker void CheckSAD() const {
371*fb1b10abSAndroid Build Coastguard Worker const unsigned int reference_sad = ReferenceSAD(GetBlockRefOffset(0));
372*fb1b10abSAndroid Build Coastguard Worker const unsigned int exp_sad = SAD(0);
373*fb1b10abSAndroid Build Coastguard Worker
374*fb1b10abSAndroid Build Coastguard Worker ASSERT_EQ(reference_sad, exp_sad);
375*fb1b10abSAndroid Build Coastguard Worker }
376*fb1b10abSAndroid Build Coastguard Worker
Run()377*fb1b10abSAndroid Build Coastguard Worker void Run() override {
378*fb1b10abSAndroid Build Coastguard Worker params_.func(source_data_, source_stride_, reference_data_,
379*fb1b10abSAndroid Build Coastguard Worker reference_stride_);
380*fb1b10abSAndroid Build Coastguard Worker }
381*fb1b10abSAndroid Build Coastguard Worker };
382*fb1b10abSAndroid Build Coastguard Worker
383*fb1b10abSAndroid Build Coastguard Worker class SADSkipTest : public AbstractBench, public SADTestBase<SadMxNParam> {
384*fb1b10abSAndroid Build Coastguard Worker public:
SADSkipTest()385*fb1b10abSAndroid Build Coastguard Worker SADSkipTest() : SADTestBase(GetParam()) {}
386*fb1b10abSAndroid Build Coastguard Worker
387*fb1b10abSAndroid Build Coastguard Worker protected:
SAD(int block_idx) const388*fb1b10abSAndroid Build Coastguard Worker unsigned int SAD(int block_idx) const {
389*fb1b10abSAndroid Build Coastguard Worker unsigned int ret;
390*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const reference = GetReference(block_idx);
391*fb1b10abSAndroid Build Coastguard Worker
392*fb1b10abSAndroid Build Coastguard Worker ASM_REGISTER_STATE_CHECK(ret = params_.func(source_data_, source_stride_,
393*fb1b10abSAndroid Build Coastguard Worker reference, reference_stride_));
394*fb1b10abSAndroid Build Coastguard Worker return ret;
395*fb1b10abSAndroid Build Coastguard Worker }
396*fb1b10abSAndroid Build Coastguard Worker
CheckSAD() const397*fb1b10abSAndroid Build Coastguard Worker void CheckSAD() const {
398*fb1b10abSAndroid Build Coastguard Worker const unsigned int reference_sad = ReferenceSADSkip(GetBlockRefOffset(0));
399*fb1b10abSAndroid Build Coastguard Worker const unsigned int exp_sad = SAD(0);
400*fb1b10abSAndroid Build Coastguard Worker
401*fb1b10abSAndroid Build Coastguard Worker ASSERT_EQ(reference_sad, exp_sad);
402*fb1b10abSAndroid Build Coastguard Worker }
403*fb1b10abSAndroid Build Coastguard Worker
Run()404*fb1b10abSAndroid Build Coastguard Worker void Run() override {
405*fb1b10abSAndroid Build Coastguard Worker params_.func(source_data_, source_stride_, reference_data_,
406*fb1b10abSAndroid Build Coastguard Worker reference_stride_);
407*fb1b10abSAndroid Build Coastguard Worker }
408*fb1b10abSAndroid Build Coastguard Worker };
409*fb1b10abSAndroid Build Coastguard Worker
410*fb1b10abSAndroid Build Coastguard Worker class SADavgTest : public AbstractBench, public SADTestBase<SadMxNAvgParam> {
411*fb1b10abSAndroid Build Coastguard Worker public:
SADavgTest()412*fb1b10abSAndroid Build Coastguard Worker SADavgTest() : SADTestBase(GetParam()) {}
413*fb1b10abSAndroid Build Coastguard Worker
414*fb1b10abSAndroid Build Coastguard Worker protected:
SAD_avg(int block_idx) const415*fb1b10abSAndroid Build Coastguard Worker unsigned int SAD_avg(int block_idx) const {
416*fb1b10abSAndroid Build Coastguard Worker unsigned int ret;
417*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const reference = GetReference(block_idx);
418*fb1b10abSAndroid Build Coastguard Worker
419*fb1b10abSAndroid Build Coastguard Worker ASM_REGISTER_STATE_CHECK(ret = params_.func(source_data_, source_stride_,
420*fb1b10abSAndroid Build Coastguard Worker reference, reference_stride_,
421*fb1b10abSAndroid Build Coastguard Worker second_pred_));
422*fb1b10abSAndroid Build Coastguard Worker return ret;
423*fb1b10abSAndroid Build Coastguard Worker }
424*fb1b10abSAndroid Build Coastguard Worker
CheckSAD() const425*fb1b10abSAndroid Build Coastguard Worker void CheckSAD() const {
426*fb1b10abSAndroid Build Coastguard Worker const unsigned int reference_sad = ReferenceSADavg(0);
427*fb1b10abSAndroid Build Coastguard Worker const unsigned int exp_sad = SAD_avg(0);
428*fb1b10abSAndroid Build Coastguard Worker
429*fb1b10abSAndroid Build Coastguard Worker ASSERT_EQ(reference_sad, exp_sad);
430*fb1b10abSAndroid Build Coastguard Worker }
431*fb1b10abSAndroid Build Coastguard Worker
Run()432*fb1b10abSAndroid Build Coastguard Worker void Run() override {
433*fb1b10abSAndroid Build Coastguard Worker params_.func(source_data_, source_stride_, reference_data_,
434*fb1b10abSAndroid Build Coastguard Worker reference_stride_, second_pred_);
435*fb1b10abSAndroid Build Coastguard Worker }
436*fb1b10abSAndroid Build Coastguard Worker };
437*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADTest,MaxRef)438*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADTest, MaxRef) {
439*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, 0);
440*fb1b10abSAndroid Build Coastguard Worker FillConstant(reference_data_, reference_stride_, mask_);
441*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
442*fb1b10abSAndroid Build Coastguard Worker }
443*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADTest,MaxSrc)444*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADTest, MaxSrc) {
445*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, mask_);
446*fb1b10abSAndroid Build Coastguard Worker FillConstant(reference_data_, reference_stride_, 0);
447*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
448*fb1b10abSAndroid Build Coastguard Worker }
449*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADTest,ShortRef)450*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADTest, ShortRef) {
451*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = reference_stride_;
452*fb1b10abSAndroid Build Coastguard Worker reference_stride_ >>= 1;
453*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
454*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
455*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
456*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
457*fb1b10abSAndroid Build Coastguard Worker }
458*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADTest,UnalignedRef)459*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADTest, UnalignedRef) {
460*fb1b10abSAndroid Build Coastguard Worker // The reference frame, but not the source frame, may be unaligned for
461*fb1b10abSAndroid Build Coastguard Worker // certain types of searches.
462*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = reference_stride_;
463*fb1b10abSAndroid Build Coastguard Worker reference_stride_ -= 1;
464*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
465*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
466*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
467*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
468*fb1b10abSAndroid Build Coastguard Worker }
469*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADTest,ShortSrc)470*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADTest, ShortSrc) {
471*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = source_stride_;
472*fb1b10abSAndroid Build Coastguard Worker source_stride_ >>= 1;
473*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
474*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
475*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
476*fb1b10abSAndroid Build Coastguard Worker source_stride_ = tmp_stride;
477*fb1b10abSAndroid Build Coastguard Worker }
478*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADTest,DISABLED_Speed)479*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADTest, DISABLED_Speed) {
480*fb1b10abSAndroid Build Coastguard Worker const int kCountSpeedTestBlock = 50000000 / (params_.width * params_.height);
481*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
482*fb1b10abSAndroid Build Coastguard Worker
483*fb1b10abSAndroid Build Coastguard Worker RunNTimes(kCountSpeedTestBlock);
484*fb1b10abSAndroid Build Coastguard Worker
485*fb1b10abSAndroid Build Coastguard Worker char title[16];
486*fb1b10abSAndroid Build Coastguard Worker snprintf(title, sizeof(title), "%dx%d", params_.width, params_.height);
487*fb1b10abSAndroid Build Coastguard Worker PrintMedian(title);
488*fb1b10abSAndroid Build Coastguard Worker }
489*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipTest,MaxRef)490*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipTest, MaxRef) {
491*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, 0);
492*fb1b10abSAndroid Build Coastguard Worker FillConstant(reference_data_, reference_stride_, mask_);
493*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
494*fb1b10abSAndroid Build Coastguard Worker }
495*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipTest,MaxSrc)496*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipTest, MaxSrc) {
497*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, mask_);
498*fb1b10abSAndroid Build Coastguard Worker FillConstant(reference_data_, reference_stride_, 0);
499*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
500*fb1b10abSAndroid Build Coastguard Worker }
501*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipTest,ShortRef)502*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipTest, ShortRef) {
503*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = reference_stride_;
504*fb1b10abSAndroid Build Coastguard Worker reference_stride_ >>= 1;
505*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
506*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
507*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
508*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
509*fb1b10abSAndroid Build Coastguard Worker }
510*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipTest,UnalignedRef)511*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipTest, UnalignedRef) {
512*fb1b10abSAndroid Build Coastguard Worker // The reference frame, but not the source frame, may be unaligned for
513*fb1b10abSAndroid Build Coastguard Worker // certain types of searches.
514*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = reference_stride_;
515*fb1b10abSAndroid Build Coastguard Worker reference_stride_ -= 1;
516*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
517*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
518*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
519*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
520*fb1b10abSAndroid Build Coastguard Worker }
521*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipTest,ShortSrc)522*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipTest, ShortSrc) {
523*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = source_stride_;
524*fb1b10abSAndroid Build Coastguard Worker source_stride_ >>= 1;
525*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
526*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
527*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
528*fb1b10abSAndroid Build Coastguard Worker source_stride_ = tmp_stride;
529*fb1b10abSAndroid Build Coastguard Worker }
530*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipTest,DISABLED_Speed)531*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipTest, DISABLED_Speed) {
532*fb1b10abSAndroid Build Coastguard Worker const int kCountSpeedTestBlock = 50000000 / (params_.width * params_.height);
533*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
534*fb1b10abSAndroid Build Coastguard Worker
535*fb1b10abSAndroid Build Coastguard Worker RunNTimes(kCountSpeedTestBlock);
536*fb1b10abSAndroid Build Coastguard Worker
537*fb1b10abSAndroid Build Coastguard Worker char title[16];
538*fb1b10abSAndroid Build Coastguard Worker snprintf(title, sizeof(title), "%dx%d", params_.width, params_.height);
539*fb1b10abSAndroid Build Coastguard Worker PrintMedian(title);
540*fb1b10abSAndroid Build Coastguard Worker }
541*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADavgTest,MaxRef)542*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADavgTest, MaxRef) {
543*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, 0);
544*fb1b10abSAndroid Build Coastguard Worker FillConstant(reference_data_, reference_stride_, mask_);
545*fb1b10abSAndroid Build Coastguard Worker FillConstant(second_pred_, params_.width, 0);
546*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
547*fb1b10abSAndroid Build Coastguard Worker }
TEST_P(SADavgTest,MaxSrc)548*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADavgTest, MaxSrc) {
549*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, mask_);
550*fb1b10abSAndroid Build Coastguard Worker FillConstant(reference_data_, reference_stride_, 0);
551*fb1b10abSAndroid Build Coastguard Worker FillConstant(second_pred_, params_.width, 0);
552*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
553*fb1b10abSAndroid Build Coastguard Worker }
554*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADavgTest,ShortRef)555*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADavgTest, ShortRef) {
556*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = reference_stride_;
557*fb1b10abSAndroid Build Coastguard Worker reference_stride_ >>= 1;
558*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
559*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
560*fb1b10abSAndroid Build Coastguard Worker FillRandom(second_pred_, params_.width);
561*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
562*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
563*fb1b10abSAndroid Build Coastguard Worker }
564*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADavgTest,UnalignedRef)565*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADavgTest, UnalignedRef) {
566*fb1b10abSAndroid Build Coastguard Worker // The reference frame, but not the source frame, may be unaligned for
567*fb1b10abSAndroid Build Coastguard Worker // certain types of searches.
568*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = reference_stride_;
569*fb1b10abSAndroid Build Coastguard Worker reference_stride_ -= 1;
570*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
571*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
572*fb1b10abSAndroid Build Coastguard Worker FillRandom(second_pred_, params_.width);
573*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
574*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
575*fb1b10abSAndroid Build Coastguard Worker }
576*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADavgTest,ShortSrc)577*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADavgTest, ShortSrc) {
578*fb1b10abSAndroid Build Coastguard Worker const int tmp_stride = source_stride_;
579*fb1b10abSAndroid Build Coastguard Worker source_stride_ >>= 1;
580*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
581*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
582*fb1b10abSAndroid Build Coastguard Worker FillRandom(second_pred_, params_.width);
583*fb1b10abSAndroid Build Coastguard Worker CheckSAD();
584*fb1b10abSAndroid Build Coastguard Worker source_stride_ = tmp_stride;
585*fb1b10abSAndroid Build Coastguard Worker }
586*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADavgTest,DISABLED_Speed)587*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADavgTest, DISABLED_Speed) {
588*fb1b10abSAndroid Build Coastguard Worker const int kCountSpeedTestBlock = 50000000 / (params_.width * params_.height);
589*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
590*fb1b10abSAndroid Build Coastguard Worker FillRandom(reference_data_, reference_stride_);
591*fb1b10abSAndroid Build Coastguard Worker FillRandom(second_pred_, params_.width);
592*fb1b10abSAndroid Build Coastguard Worker
593*fb1b10abSAndroid Build Coastguard Worker RunNTimes(kCountSpeedTestBlock);
594*fb1b10abSAndroid Build Coastguard Worker
595*fb1b10abSAndroid Build Coastguard Worker char title[16];
596*fb1b10abSAndroid Build Coastguard Worker snprintf(title, sizeof(title), "%dx%d", params_.width, params_.height);
597*fb1b10abSAndroid Build Coastguard Worker PrintMedian(title);
598*fb1b10abSAndroid Build Coastguard Worker }
599*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADx4Test,MaxRef)600*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADx4Test, MaxRef) {
601*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, 0);
602*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(0), reference_stride_, mask_);
603*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(1), reference_stride_, mask_);
604*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(2), reference_stride_, mask_);
605*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(3), reference_stride_, mask_);
606*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
607*fb1b10abSAndroid Build Coastguard Worker }
608*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADx4Test,MaxSrc)609*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADx4Test, MaxSrc) {
610*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, mask_);
611*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(0), reference_stride_, 0);
612*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(1), reference_stride_, 0);
613*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(2), reference_stride_, 0);
614*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(3), reference_stride_, 0);
615*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
616*fb1b10abSAndroid Build Coastguard Worker }
617*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADx4Test,ShortRef)618*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADx4Test, ShortRef) {
619*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = reference_stride_;
620*fb1b10abSAndroid Build Coastguard Worker reference_stride_ >>= 1;
621*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
622*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
623*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
624*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
625*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
626*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
627*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
628*fb1b10abSAndroid Build Coastguard Worker }
629*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADx4Test,UnalignedRef)630*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADx4Test, UnalignedRef) {
631*fb1b10abSAndroid Build Coastguard Worker // The reference frame, but not the source frame, may be unaligned for
632*fb1b10abSAndroid Build Coastguard Worker // certain types of searches.
633*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = reference_stride_;
634*fb1b10abSAndroid Build Coastguard Worker reference_stride_ -= 1;
635*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
636*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
637*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
638*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
639*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
640*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
641*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
642*fb1b10abSAndroid Build Coastguard Worker }
643*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADx4Test,ShortSrc)644*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADx4Test, ShortSrc) {
645*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = source_stride_;
646*fb1b10abSAndroid Build Coastguard Worker source_stride_ >>= 1;
647*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
648*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
649*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
650*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
651*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
652*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
653*fb1b10abSAndroid Build Coastguard Worker source_stride_ = tmp_stride;
654*fb1b10abSAndroid Build Coastguard Worker }
655*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADx4Test,SrcAlignedByWidth)656*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADx4Test, SrcAlignedByWidth) {
657*fb1b10abSAndroid Build Coastguard Worker uint8_t *tmp_source_data = source_data_;
658*fb1b10abSAndroid Build Coastguard Worker source_data_ += params_.width;
659*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
660*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
661*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
662*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
663*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
664*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
665*fb1b10abSAndroid Build Coastguard Worker source_data_ = tmp_source_data;
666*fb1b10abSAndroid Build Coastguard Worker }
667*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADx4Test,DISABLED_Speed)668*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADx4Test, DISABLED_Speed) {
669*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = reference_stride_;
670*fb1b10abSAndroid Build Coastguard Worker reference_stride_ -= 1;
671*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
672*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
673*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
674*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
675*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
676*fb1b10abSAndroid Build Coastguard Worker const int kCountSpeedTestBlock = 500000000 / (params_.width * params_.height);
677*fb1b10abSAndroid Build Coastguard Worker uint32_t reference_sad[4];
678*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(kDataAlignment, uint32_t, exp_sad[4]);
679*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer timer;
680*fb1b10abSAndroid Build Coastguard Worker for (int block = 0; block < 4; ++block) {
681*fb1b10abSAndroid Build Coastguard Worker reference_sad[block] = ReferenceSAD(GetBlockRefOffset(block));
682*fb1b10abSAndroid Build Coastguard Worker }
683*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer_start(&timer);
684*fb1b10abSAndroid Build Coastguard Worker for (int i = 0; i < kCountSpeedTestBlock; ++i) {
685*fb1b10abSAndroid Build Coastguard Worker SADs(exp_sad);
686*fb1b10abSAndroid Build Coastguard Worker }
687*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer_mark(&timer);
688*fb1b10abSAndroid Build Coastguard Worker for (int block = 0; block < 4; ++block) {
689*fb1b10abSAndroid Build Coastguard Worker EXPECT_EQ(reference_sad[block], exp_sad[block]) << "block " << block;
690*fb1b10abSAndroid Build Coastguard Worker }
691*fb1b10abSAndroid Build Coastguard Worker const int elapsed_time =
692*fb1b10abSAndroid Build Coastguard Worker static_cast<int>(vpx_usec_timer_elapsed(&timer) / 1000);
693*fb1b10abSAndroid Build Coastguard Worker printf("sad%dx%dx4 (%2dbit) time: %5d ms\n", params_.width, params_.height,
694*fb1b10abSAndroid Build Coastguard Worker bit_depth_, elapsed_time);
695*fb1b10abSAndroid Build Coastguard Worker
696*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
697*fb1b10abSAndroid Build Coastguard Worker }
698*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipx4Test,MaxRef)699*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipx4Test, MaxRef) {
700*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, 0);
701*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(0), reference_stride_, mask_);
702*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(1), reference_stride_, mask_);
703*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(2), reference_stride_, mask_);
704*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(3), reference_stride_, mask_);
705*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
706*fb1b10abSAndroid Build Coastguard Worker }
707*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipx4Test,MaxSrc)708*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipx4Test, MaxSrc) {
709*fb1b10abSAndroid Build Coastguard Worker FillConstant(source_data_, source_stride_, mask_);
710*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(0), reference_stride_, 0);
711*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(1), reference_stride_, 0);
712*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(2), reference_stride_, 0);
713*fb1b10abSAndroid Build Coastguard Worker FillConstant(GetReference(3), reference_stride_, 0);
714*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
715*fb1b10abSAndroid Build Coastguard Worker }
716*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipx4Test,ShortRef)717*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipx4Test, ShortRef) {
718*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = reference_stride_;
719*fb1b10abSAndroid Build Coastguard Worker reference_stride_ >>= 1;
720*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
721*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
722*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
723*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
724*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
725*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
726*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
727*fb1b10abSAndroid Build Coastguard Worker }
728*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipx4Test,UnalignedRef)729*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipx4Test, UnalignedRef) {
730*fb1b10abSAndroid Build Coastguard Worker // The reference frame, but not the source frame, may be unaligned for
731*fb1b10abSAndroid Build Coastguard Worker // certain types of searches.
732*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = reference_stride_;
733*fb1b10abSAndroid Build Coastguard Worker reference_stride_ -= 1;
734*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
735*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
736*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
737*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
738*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
739*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
740*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
741*fb1b10abSAndroid Build Coastguard Worker }
742*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipx4Test,ShortSrc)743*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipx4Test, ShortSrc) {
744*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = source_stride_;
745*fb1b10abSAndroid Build Coastguard Worker source_stride_ >>= 1;
746*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
747*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
748*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
749*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
750*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
751*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
752*fb1b10abSAndroid Build Coastguard Worker source_stride_ = tmp_stride;
753*fb1b10abSAndroid Build Coastguard Worker }
754*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipx4Test,SrcAlignedByWidth)755*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipx4Test, SrcAlignedByWidth) {
756*fb1b10abSAndroid Build Coastguard Worker uint8_t *tmp_source_data = source_data_;
757*fb1b10abSAndroid Build Coastguard Worker source_data_ += params_.width;
758*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
759*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
760*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
761*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
762*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
763*fb1b10abSAndroid Build Coastguard Worker CheckSADs();
764*fb1b10abSAndroid Build Coastguard Worker source_data_ = tmp_source_data;
765*fb1b10abSAndroid Build Coastguard Worker }
766*fb1b10abSAndroid Build Coastguard Worker
TEST_P(SADSkipx4Test,DISABLED_Speed)767*fb1b10abSAndroid Build Coastguard Worker TEST_P(SADSkipx4Test, DISABLED_Speed) {
768*fb1b10abSAndroid Build Coastguard Worker int tmp_stride = reference_stride_;
769*fb1b10abSAndroid Build Coastguard Worker reference_stride_ -= 1;
770*fb1b10abSAndroid Build Coastguard Worker FillRandom(source_data_, source_stride_);
771*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(0), reference_stride_);
772*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(1), reference_stride_);
773*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(2), reference_stride_);
774*fb1b10abSAndroid Build Coastguard Worker FillRandom(GetReference(3), reference_stride_);
775*fb1b10abSAndroid Build Coastguard Worker const int kCountSpeedTestBlock = 500000000 / (params_.width * params_.height);
776*fb1b10abSAndroid Build Coastguard Worker uint32_t reference_sad[4];
777*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(kDataAlignment, uint32_t, exp_sad[4]);
778*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer timer;
779*fb1b10abSAndroid Build Coastguard Worker for (int block = 0; block < 4; ++block) {
780*fb1b10abSAndroid Build Coastguard Worker reference_sad[block] = ReferenceSADSkip(GetBlockRefOffset(block));
781*fb1b10abSAndroid Build Coastguard Worker }
782*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer_start(&timer);
783*fb1b10abSAndroid Build Coastguard Worker for (int i = 0; i < kCountSpeedTestBlock; ++i) {
784*fb1b10abSAndroid Build Coastguard Worker SADs(exp_sad);
785*fb1b10abSAndroid Build Coastguard Worker }
786*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer_mark(&timer);
787*fb1b10abSAndroid Build Coastguard Worker for (int block = 0; block < 4; ++block) {
788*fb1b10abSAndroid Build Coastguard Worker EXPECT_EQ(reference_sad[block], exp_sad[block]) << "block " << block;
789*fb1b10abSAndroid Build Coastguard Worker }
790*fb1b10abSAndroid Build Coastguard Worker const int elapsed_time =
791*fb1b10abSAndroid Build Coastguard Worker static_cast<int>(vpx_usec_timer_elapsed(&timer) / 1000);
792*fb1b10abSAndroid Build Coastguard Worker printf("sad%dx%dx4 (%2dbit) time: %5d ms\n", params_.width, params_.height,
793*fb1b10abSAndroid Build Coastguard Worker bit_depth_, elapsed_time);
794*fb1b10abSAndroid Build Coastguard Worker
795*fb1b10abSAndroid Build Coastguard Worker reference_stride_ = tmp_stride;
796*fb1b10abSAndroid Build Coastguard Worker }
797*fb1b10abSAndroid Build Coastguard Worker
798*fb1b10abSAndroid Build Coastguard Worker //------------------------------------------------------------------------------
799*fb1b10abSAndroid Build Coastguard Worker // C functions
800*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam c_tests[] = {
801*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_c),
802*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_c),
803*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_sad32x64_c),
804*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_c),
805*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_sad32x16_c),
806*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_sad16x32_c),
807*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_c),
808*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_sad16x8_c),
809*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_sad8x16_c),
810*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_sad8x8_c),
811*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_sad8x4_c),
812*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_sad4x8_c),
813*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_sad4x4_c),
814*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
815*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_c, 8),
816*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_c, 8),
817*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_c, 8),
818*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_c, 8),
819*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_c, 8),
820*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_c, 8),
821*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_c, 8),
822*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_c, 8),
823*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_c, 8),
824*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_c, 8),
825*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_c, 8),
826*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_highbd_sad4x8_c, 8),
827*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_highbd_sad4x4_c, 8),
828*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_c, 10),
829*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_c, 10),
830*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_c, 10),
831*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_c, 10),
832*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_c, 10),
833*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_c, 10),
834*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_c, 10),
835*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_c, 10),
836*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_c, 10),
837*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_c, 10),
838*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_c, 10),
839*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_highbd_sad4x8_c, 10),
840*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_highbd_sad4x4_c, 10),
841*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_c, 12),
842*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_c, 12),
843*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_c, 12),
844*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_c, 12),
845*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_c, 12),
846*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_c, 12),
847*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_c, 12),
848*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_c, 12),
849*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_c, 12),
850*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_c, 12),
851*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_c, 12),
852*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_highbd_sad4x8_c, 12),
853*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_highbd_sad4x4_c, 12),
854*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
855*fb1b10abSAndroid Build Coastguard Worker };
856*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, SADTest, ::testing::ValuesIn(c_tests));
857*fb1b10abSAndroid Build Coastguard Worker
858*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNParam skip_c_tests[] = {
859*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_sad_skip_64x64_c),
860*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_sad_skip_64x32_c),
861*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_sad_skip_32x64_c),
862*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_sad_skip_32x32_c),
863*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_sad_skip_32x16_c),
864*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_sad_skip_16x32_c),
865*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_sad_skip_16x16_c),
866*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_sad_skip_16x8_c),
867*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_sad_skip_8x16_c),
868*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_sad_skip_8x8_c),
869*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_sad_skip_4x8_c),
870*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
871*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_c, 8),
872*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_c, 8),
873*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_c, 8),
874*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_c, 8),
875*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_c, 8),
876*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_c, 8),
877*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_c, 8),
878*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_c, 8),
879*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_c, 8),
880*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_c, 8),
881*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_highbd_sad_skip_4x8_c, 8),
882*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_c, 10),
883*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_c, 10),
884*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_c, 10),
885*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_c, 10),
886*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_c, 10),
887*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_c, 10),
888*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_c, 10),
889*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_c, 10),
890*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_c, 10),
891*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_c, 10),
892*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_highbd_sad_skip_4x8_c, 10),
893*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_c, 12),
894*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_c, 12),
895*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_c, 12),
896*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_c, 12),
897*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_c, 12),
898*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_c, 12),
899*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_c, 12),
900*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_c, 12),
901*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_c, 12),
902*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_c, 12),
903*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_highbd_sad_skip_4x8_c, 12),
904*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
905*fb1b10abSAndroid Build Coastguard Worker };
906*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, SADSkipTest, ::testing::ValuesIn(skip_c_tests));
907*fb1b10abSAndroid Build Coastguard Worker
908*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_c_tests[] = {
909*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_c),
910*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_c),
911*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_c),
912*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_c),
913*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_c),
914*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_c),
915*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_c),
916*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_c),
917*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_c),
918*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_c),
919*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_c),
920*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_c),
921*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_c),
922*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
923*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_c, 8),
924*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_c, 8),
925*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_c, 8),
926*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_c, 8),
927*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_c, 8),
928*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_c, 8),
929*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_c, 8),
930*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_c, 8),
931*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_c, 8),
932*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_c, 8),
933*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_c, 8),
934*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_c, 8),
935*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_c, 8),
936*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_c, 10),
937*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_c, 10),
938*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_c, 10),
939*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_c, 10),
940*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_c, 10),
941*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_c, 10),
942*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_c, 10),
943*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_c, 10),
944*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_c, 10),
945*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_c, 10),
946*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_c, 10),
947*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_c, 10),
948*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_c, 10),
949*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_c, 12),
950*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_c, 12),
951*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_c, 12),
952*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_c, 12),
953*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_c, 12),
954*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_c, 12),
955*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_c, 12),
956*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_c, 12),
957*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_c, 12),
958*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_c, 12),
959*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_c, 12),
960*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_c, 12),
961*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_c, 12),
962*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
963*fb1b10abSAndroid Build Coastguard Worker };
964*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, SADavgTest, ::testing::ValuesIn(avg_c_tests));
965*fb1b10abSAndroid Build Coastguard Worker
966*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_c_tests[] = {
967*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_c),
968*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_c),
969*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_c),
970*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_c),
971*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_sad32x16x4d_c),
972*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_sad16x32x4d_c),
973*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_c),
974*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_sad16x8x4d_c),
975*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_sad8x16x4d_c),
976*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_sad8x8x4d_c),
977*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_sad8x4x4d_c),
978*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_sad4x8x4d_c),
979*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_sad4x4x4d_c),
980*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
981*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_c, 8),
982*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_c, 8),
983*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_c, 8),
984*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_c, 8),
985*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_c, 8),
986*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_c, 8),
987*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_c, 8),
988*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_c, 8),
989*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_c, 8),
990*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_c, 8),
991*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_c, 8),
992*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_c, 8),
993*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_c, 8),
994*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_c, 10),
995*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_c, 10),
996*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_c, 10),
997*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_c, 10),
998*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_c, 10),
999*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_c, 10),
1000*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_c, 10),
1001*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_c, 10),
1002*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_c, 10),
1003*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_c, 10),
1004*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_c, 10),
1005*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_c, 10),
1006*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_c, 10),
1007*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_c, 12),
1008*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_c, 12),
1009*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_c, 12),
1010*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_c, 12),
1011*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_c, 12),
1012*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_c, 12),
1013*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_c, 12),
1014*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_c, 12),
1015*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_c, 12),
1016*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_c, 12),
1017*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_c, 12),
1018*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_c, 12),
1019*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_c, 12),
1020*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1021*fb1b10abSAndroid Build Coastguard Worker };
1022*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, SADx4Test, ::testing::ValuesIn(x4d_c_tests));
1023*fb1b10abSAndroid Build Coastguard Worker
1024*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNx4Param skip_x4d_c_tests[] = {
1025*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_sad_skip_64x64x4d_c),
1026*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_sad_skip_64x32x4d_c),
1027*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_sad_skip_32x64x4d_c),
1028*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_sad_skip_32x32x4d_c),
1029*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_sad_skip_32x16x4d_c),
1030*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_sad_skip_16x32x4d_c),
1031*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_sad_skip_16x16x4d_c),
1032*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_sad_skip_16x8x4d_c),
1033*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_sad_skip_8x16x4d_c),
1034*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_sad_skip_8x8x4d_c),
1035*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_sad_skip_4x8x4d_c),
1036*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1037*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_c, 8),
1038*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_c, 8),
1039*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_c, 8),
1040*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_c, 8),
1041*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_c, 8),
1042*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_c, 8),
1043*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_c, 8),
1044*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_c, 8),
1045*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_c, 8),
1046*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_c, 8),
1047*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_c, 8),
1048*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_c, 10),
1049*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_c, 10),
1050*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_c, 10),
1051*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_c, 10),
1052*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_c, 10),
1053*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_c, 10),
1054*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_c, 10),
1055*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_c, 10),
1056*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_c, 10),
1057*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_c, 10),
1058*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_c, 10),
1059*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_c, 12),
1060*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_c, 12),
1061*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_c, 12),
1062*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_c, 12),
1063*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_c, 12),
1064*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_c, 12),
1065*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_c, 12),
1066*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_c, 12),
1067*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_c, 12),
1068*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_c, 12),
1069*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_c, 12),
1070*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1071*fb1b10abSAndroid Build Coastguard Worker };
1072*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, SADSkipx4Test,
1073*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_x4d_c_tests));
1074*fb1b10abSAndroid Build Coastguard Worker
1075*fb1b10abSAndroid Build Coastguard Worker //------------------------------------------------------------------------------
1076*fb1b10abSAndroid Build Coastguard Worker // ARM functions
1077*fb1b10abSAndroid Build Coastguard Worker #if HAVE_NEON
1078*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam neon_tests[] = {
1079*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_neon),
1080*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_neon),
1081*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_neon),
1082*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_sad16x32_neon),
1083*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_neon),
1084*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_sad16x8_neon),
1085*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_sad8x16_neon),
1086*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_sad8x8_neon),
1087*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_sad8x4_neon),
1088*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_sad4x8_neon),
1089*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_sad4x4_neon),
1090*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1091*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_highbd_sad4x4_neon, 8),
1092*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_highbd_sad4x8_neon, 8),
1093*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_neon, 8),
1094*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_neon, 8),
1095*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_neon, 8),
1096*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_neon, 8),
1097*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_neon, 8),
1098*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_neon, 8),
1099*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_neon, 8),
1100*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_neon, 8),
1101*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_neon, 8),
1102*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_neon, 8),
1103*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_highbd_sad4x4_neon, 10),
1104*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_highbd_sad4x8_neon, 10),
1105*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_neon, 10),
1106*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_neon, 10),
1107*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_neon, 10),
1108*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_neon, 10),
1109*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_neon, 10),
1110*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_neon, 10),
1111*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_neon, 10),
1112*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_neon, 10),
1113*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_neon, 10),
1114*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_neon, 10),
1115*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_highbd_sad4x4_neon, 12),
1116*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_highbd_sad4x8_neon, 12),
1117*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_neon, 12),
1118*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_neon, 12),
1119*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_neon, 12),
1120*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_neon, 12),
1121*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_neon, 12),
1122*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_neon, 12),
1123*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_neon, 12),
1124*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_neon, 12),
1125*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_neon, 12),
1126*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_neon, 12),
1127*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1128*fb1b10abSAndroid Build Coastguard Worker
1129*fb1b10abSAndroid Build Coastguard Worker };
1130*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, SADTest, ::testing::ValuesIn(neon_tests));
1131*fb1b10abSAndroid Build Coastguard Worker
1132*fb1b10abSAndroid Build Coastguard Worker #if HAVE_NEON_DOTPROD
1133*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam neon_dotprod_tests[] = {
1134*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_neon_dotprod),
1135*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_neon_dotprod),
1136*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_sad32x64_neon_dotprod),
1137*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_neon_dotprod),
1138*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_sad32x16_neon_dotprod),
1139*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_sad16x32_neon_dotprod),
1140*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_neon_dotprod),
1141*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_sad16x8_neon_dotprod),
1142*fb1b10abSAndroid Build Coastguard Worker };
1143*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_DOTPROD, SADTest,
1144*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(neon_dotprod_tests));
1145*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_NEON_DOTPROD
1146*fb1b10abSAndroid Build Coastguard Worker
1147*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNParam skip_neon_tests[] = {
1148*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_sad_skip_64x64_neon),
1149*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_sad_skip_64x32_neon),
1150*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_sad_skip_32x64_neon),
1151*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_sad_skip_32x32_neon),
1152*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_sad_skip_32x16_neon),
1153*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_sad_skip_16x32_neon),
1154*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_sad_skip_16x16_neon),
1155*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_sad_skip_16x8_neon),
1156*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_sad_skip_8x16_neon),
1157*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_sad_skip_8x8_neon),
1158*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 4, &vpx_sad_skip_8x4_neon),
1159*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_sad_skip_4x8_neon),
1160*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 4, &vpx_sad_skip_4x4_neon),
1161*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1162*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 4, &vpx_highbd_sad_skip_4x4_neon, 8),
1163*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_highbd_sad_skip_4x8_neon, 8),
1164*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 4, &vpx_highbd_sad_skip_8x4_neon, 8),
1165*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_neon, 8),
1166*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_neon, 8),
1167*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_neon, 8),
1168*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_neon, 8),
1169*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_neon, 8),
1170*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_neon, 8),
1171*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_neon, 8),
1172*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_neon, 8),
1173*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_neon, 8),
1174*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_neon, 8),
1175*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 4, &vpx_highbd_sad_skip_4x4_neon, 10),
1176*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_highbd_sad_skip_4x8_neon, 10),
1177*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 4, &vpx_highbd_sad_skip_8x4_neon, 10),
1178*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_neon, 10),
1179*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_neon, 10),
1180*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_neon, 10),
1181*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_neon, 10),
1182*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_neon, 10),
1183*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_neon, 10),
1184*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_neon, 10),
1185*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_neon, 10),
1186*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_neon, 10),
1187*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_neon, 10),
1188*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 4, &vpx_highbd_sad_skip_4x4_neon, 12),
1189*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_highbd_sad_skip_4x8_neon, 12),
1190*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 4, &vpx_highbd_sad_skip_8x4_neon, 12),
1191*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_neon, 12),
1192*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_neon, 12),
1193*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_neon, 12),
1194*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_neon, 12),
1195*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_neon, 12),
1196*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_neon, 12),
1197*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_neon, 12),
1198*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_neon, 12),
1199*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_neon, 12),
1200*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_neon, 12),
1201*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1202*fb1b10abSAndroid Build Coastguard Worker };
1203*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, SADSkipTest,
1204*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_neon_tests));
1205*fb1b10abSAndroid Build Coastguard Worker
1206*fb1b10abSAndroid Build Coastguard Worker #if HAVE_NEON_DOTPROD
1207*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNParam skip_neon_dotprod_tests[] = {
1208*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_sad_skip_64x64_neon_dotprod),
1209*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_sad_skip_64x32_neon_dotprod),
1210*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_sad_skip_32x64_neon_dotprod),
1211*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_sad_skip_32x32_neon_dotprod),
1212*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_sad_skip_32x16_neon_dotprod),
1213*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_sad_skip_16x32_neon_dotprod),
1214*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_sad_skip_16x16_neon_dotprod),
1215*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_sad_skip_16x8_neon_dotprod),
1216*fb1b10abSAndroid Build Coastguard Worker };
1217*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_DOTPROD, SADSkipTest,
1218*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_neon_dotprod_tests));
1219*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_NEON_DOTPROD
1220*fb1b10abSAndroid Build Coastguard Worker
1221*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_neon_tests[] = {
1222*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_neon),
1223*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_neon),
1224*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_neon),
1225*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_neon),
1226*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_neon),
1227*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_neon),
1228*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_neon),
1229*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_neon),
1230*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_neon),
1231*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_neon),
1232*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_neon),
1233*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_neon),
1234*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_neon),
1235*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1236*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_neon, 8),
1237*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_neon, 8),
1238*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_neon, 8),
1239*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_neon, 8),
1240*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_neon, 8),
1241*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_neon, 8),
1242*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_neon, 8),
1243*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_neon, 8),
1244*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_neon, 8),
1245*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_neon, 8),
1246*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_neon, 8),
1247*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_neon, 8),
1248*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_neon, 8),
1249*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_neon, 10),
1250*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_neon, 10),
1251*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_neon, 10),
1252*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_neon, 10),
1253*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_neon, 10),
1254*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_neon, 10),
1255*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_neon, 10),
1256*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_neon, 10),
1257*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_neon, 10),
1258*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_neon, 10),
1259*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_neon, 10),
1260*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_neon, 10),
1261*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_neon, 10),
1262*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_neon, 12),
1263*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_neon, 12),
1264*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_neon, 12),
1265*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_neon, 12),
1266*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_neon, 12),
1267*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_neon, 12),
1268*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_neon, 12),
1269*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_neon, 12),
1270*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_neon, 12),
1271*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_neon, 12),
1272*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_neon, 12),
1273*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_neon, 12),
1274*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_neon, 12),
1275*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1276*fb1b10abSAndroid Build Coastguard Worker };
1277*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, SADavgTest, ::testing::ValuesIn(avg_neon_tests));
1278*fb1b10abSAndroid Build Coastguard Worker
1279*fb1b10abSAndroid Build Coastguard Worker #if HAVE_NEON_DOTPROD
1280*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_neon_dotprod_tests[] = {
1281*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_neon_dotprod),
1282*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_neon_dotprod),
1283*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_neon_dotprod),
1284*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_neon_dotprod),
1285*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_neon_dotprod),
1286*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_neon_dotprod),
1287*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_neon_dotprod),
1288*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_neon_dotprod),
1289*fb1b10abSAndroid Build Coastguard Worker };
1290*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_DOTPROD, SADavgTest,
1291*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(avg_neon_dotprod_tests));
1292*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_NEON_DOTPROD
1293*fb1b10abSAndroid Build Coastguard Worker
1294*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_neon_tests[] = {
1295*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_neon),
1296*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_neon),
1297*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_neon),
1298*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_neon),
1299*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_sad32x16x4d_neon),
1300*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_sad16x32x4d_neon),
1301*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_neon),
1302*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_sad16x8x4d_neon),
1303*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_sad8x16x4d_neon),
1304*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_sad8x8x4d_neon),
1305*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_sad8x4x4d_neon),
1306*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_sad4x8x4d_neon),
1307*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_sad4x4x4d_neon),
1308*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1309*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_neon, 8),
1310*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_neon, 8),
1311*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_neon, 8),
1312*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_neon, 8),
1313*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_neon, 8),
1314*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_neon, 8),
1315*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_neon, 8),
1316*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_neon, 8),
1317*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_neon, 8),
1318*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_neon, 8),
1319*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_neon, 8),
1320*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_neon, 8),
1321*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_neon, 10),
1322*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_neon, 10),
1323*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_neon, 10),
1324*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_neon, 10),
1325*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_neon, 10),
1326*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_neon, 10),
1327*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_neon, 10),
1328*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_neon, 10),
1329*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_neon, 10),
1330*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_neon, 10),
1331*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_neon, 10),
1332*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_neon, 10),
1333*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_neon, 12),
1334*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_neon, 12),
1335*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_neon, 12),
1336*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_neon, 12),
1337*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_neon, 12),
1338*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_neon, 12),
1339*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_neon, 12),
1340*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_neon, 12),
1341*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_neon, 12),
1342*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_neon, 12),
1343*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_neon, 12),
1344*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_neon, 12),
1345*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1346*fb1b10abSAndroid Build Coastguard Worker };
1347*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, SADx4Test, ::testing::ValuesIn(x4d_neon_tests));
1348*fb1b10abSAndroid Build Coastguard Worker
1349*fb1b10abSAndroid Build Coastguard Worker #if HAVE_NEON_DOTPROD
1350*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_neon_dotprod_tests[] = {
1351*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_neon_dotprod),
1352*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_neon_dotprod),
1353*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_neon_dotprod),
1354*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_neon_dotprod),
1355*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_sad32x16x4d_neon_dotprod),
1356*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_sad16x32x4d_neon_dotprod),
1357*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_neon_dotprod),
1358*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_sad16x8x4d_neon_dotprod),
1359*fb1b10abSAndroid Build Coastguard Worker };
1360*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_DOTPROD, SADx4Test,
1361*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(x4d_neon_dotprod_tests));
1362*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_NEON_DOTPROD
1363*fb1b10abSAndroid Build Coastguard Worker
1364*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNx4Param skip_x4d_neon_tests[] = {
1365*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_sad_skip_64x64x4d_neon),
1366*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_sad_skip_64x32x4d_neon),
1367*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_sad_skip_32x64x4d_neon),
1368*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_sad_skip_32x32x4d_neon),
1369*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_sad_skip_32x16x4d_neon),
1370*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_sad_skip_16x32x4d_neon),
1371*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_sad_skip_16x16x4d_neon),
1372*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_sad_skip_16x8x4d_neon),
1373*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_sad_skip_8x16x4d_neon),
1374*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_sad_skip_8x8x4d_neon),
1375*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 4, &vpx_sad_skip_8x4x4d_neon),
1376*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_sad_skip_4x8x4d_neon),
1377*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 4, &vpx_sad_skip_4x4x4d_neon),
1378*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1379*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 4, &vpx_highbd_sad_skip_4x4x4d_neon, 8),
1380*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_neon, 8),
1381*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 4, &vpx_highbd_sad_skip_8x4x4d_neon, 8),
1382*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_neon, 8),
1383*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_neon, 8),
1384*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_neon, 8),
1385*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_neon, 8),
1386*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_neon, 8),
1387*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_neon, 8),
1388*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_neon, 8),
1389*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_neon, 8),
1390*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_neon, 8),
1391*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 4, &vpx_highbd_sad_skip_4x4x4d_neon, 10),
1392*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_neon, 10),
1393*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 4, &vpx_highbd_sad_skip_8x4x4d_neon, 10),
1394*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_neon, 10),
1395*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_neon, 10),
1396*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_neon, 10),
1397*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_neon, 10),
1398*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_neon, 10),
1399*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_neon, 10),
1400*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_neon, 10),
1401*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_neon, 10),
1402*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_neon, 10),
1403*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 4, &vpx_highbd_sad_skip_4x4x4d_neon, 12),
1404*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_neon, 12),
1405*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 4, &vpx_highbd_sad_skip_8x4x4d_neon, 12),
1406*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_neon, 12),
1407*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_neon, 12),
1408*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_neon, 12),
1409*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_neon, 12),
1410*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_neon, 12),
1411*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_neon, 12),
1412*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_neon, 12),
1413*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_neon, 12),
1414*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_neon, 12),
1415*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1416*fb1b10abSAndroid Build Coastguard Worker };
1417*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, SADSkipx4Test,
1418*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_x4d_neon_tests));
1419*fb1b10abSAndroid Build Coastguard Worker
1420*fb1b10abSAndroid Build Coastguard Worker #if HAVE_NEONE_DOTPROD
1421*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNx4Param skip_x4d_neon_dotprod_tests[] = {
1422*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_sad_skip_64x64x4d_neon_dotprod),
1423*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_sad_skip_64x32x4d_neon_dotprod),
1424*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_sad_skip_32x64x4d_neon_dotprod),
1425*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_sad_skip_32x32x4d_neon_dotprod),
1426*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_sad_skip_32x16x4d_neon_dotprod),
1427*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_sad_skip_16x32x4d_neon_dotprod),
1428*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_sad_skip_16x16x4d_neon_dotprod),
1429*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_sad_skip_16x8x4d_neon_dotprod),
1430*fb1b10abSAndroid Build Coastguard Worker };
1431*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_DOTPROD, SADSkipx4Test,
1432*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_x4d_neon_dotprod_tests));
1433*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_NEON_DOTPROD
1434*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_NEON
1435*fb1b10abSAndroid Build Coastguard Worker
1436*fb1b10abSAndroid Build Coastguard Worker //------------------------------------------------------------------------------
1437*fb1b10abSAndroid Build Coastguard Worker // x86 functions
1438*fb1b10abSAndroid Build Coastguard Worker #if HAVE_SSE2
1439*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam sse2_tests[] = {
1440*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_sse2),
1441*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_sse2),
1442*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_sad32x64_sse2),
1443*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_sse2),
1444*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_sad32x16_sse2),
1445*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_sad16x32_sse2),
1446*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_sse2),
1447*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_sad16x8_sse2),
1448*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_sad8x16_sse2),
1449*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_sad8x8_sse2),
1450*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_sad8x4_sse2),
1451*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_sad4x8_sse2),
1452*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_sad4x4_sse2),
1453*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1454*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_sse2, 8),
1455*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_sse2, 8),
1456*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_sse2, 8),
1457*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_sse2, 8),
1458*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_sse2, 8),
1459*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_sse2, 8),
1460*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_sse2, 8),
1461*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_sse2, 8),
1462*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_sse2, 8),
1463*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_sse2, 8),
1464*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_sse2, 8),
1465*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_sse2, 10),
1466*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_sse2, 10),
1467*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_sse2, 10),
1468*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_sse2, 10),
1469*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_sse2, 10),
1470*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_sse2, 10),
1471*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_sse2, 10),
1472*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_sse2, 10),
1473*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_sse2, 10),
1474*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_sse2, 10),
1475*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_sse2, 10),
1476*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_sse2, 12),
1477*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_sse2, 12),
1478*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_sse2, 12),
1479*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_sse2, 12),
1480*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_sse2, 12),
1481*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_sse2, 12),
1482*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_sse2, 12),
1483*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_sse2, 12),
1484*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_highbd_sad8x16_sse2, 12),
1485*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_highbd_sad8x8_sse2, 12),
1486*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_highbd_sad8x4_sse2, 12),
1487*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1488*fb1b10abSAndroid Build Coastguard Worker };
1489*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, SADTest, ::testing::ValuesIn(sse2_tests));
1490*fb1b10abSAndroid Build Coastguard Worker
1491*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNParam skip_sse2_tests[] = {
1492*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_sad_skip_64x64_sse2),
1493*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_sad_skip_64x32_sse2),
1494*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_sad_skip_32x64_sse2),
1495*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_sad_skip_32x32_sse2),
1496*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_sad_skip_32x16_sse2),
1497*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_sad_skip_16x32_sse2),
1498*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_sad_skip_16x16_sse2),
1499*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_sad_skip_16x8_sse2),
1500*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_sad_skip_8x16_sse2),
1501*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_sad_skip_8x8_sse2),
1502*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(4, 8, &vpx_sad_skip_4x8_sse2),
1503*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1504*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_sse2, 8),
1505*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_sse2, 8),
1506*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_sse2, 8),
1507*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_sse2, 8),
1508*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_sse2, 8),
1509*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_sse2, 8),
1510*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_sse2, 8),
1511*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_sse2, 8),
1512*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_sse2, 8),
1513*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_sse2, 8),
1514*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_sse2, 10),
1515*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_sse2, 10),
1516*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_sse2, 10),
1517*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_sse2, 10),
1518*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_sse2, 10),
1519*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_sse2, 10),
1520*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_sse2, 10),
1521*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_sse2, 10),
1522*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_sse2, 10),
1523*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_sse2, 10),
1524*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_sse2, 12),
1525*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_sse2, 12),
1526*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_sse2, 12),
1527*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_sse2, 12),
1528*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_sse2, 12),
1529*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_sse2, 12),
1530*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_sse2, 12),
1531*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_sse2, 12),
1532*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 16, &vpx_highbd_sad_skip_8x16_sse2, 12),
1533*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(8, 8, &vpx_highbd_sad_skip_8x8_sse2, 12),
1534*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1535*fb1b10abSAndroid Build Coastguard Worker };
1536*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, SADSkipTest,
1537*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_sse2_tests));
1538*fb1b10abSAndroid Build Coastguard Worker
1539*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_sse2_tests[] = {
1540*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_sse2),
1541*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_sse2),
1542*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_sse2),
1543*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_sse2),
1544*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_sse2),
1545*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_sse2),
1546*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_sse2),
1547*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_sse2),
1548*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_sse2),
1549*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_sse2),
1550*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_sse2),
1551*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_sse2),
1552*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_sse2),
1553*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1554*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_sse2, 8),
1555*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_sse2, 8),
1556*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_sse2, 8),
1557*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_sse2, 8),
1558*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_sse2, 8),
1559*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_sse2, 8),
1560*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_sse2, 8),
1561*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_sse2, 8),
1562*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_sse2, 8),
1563*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_sse2, 8),
1564*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_sse2, 8),
1565*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_sse2, 10),
1566*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_sse2, 10),
1567*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_sse2, 10),
1568*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_sse2, 10),
1569*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_sse2, 10),
1570*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_sse2, 10),
1571*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_sse2, 10),
1572*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_sse2, 10),
1573*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_sse2, 10),
1574*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_sse2, 10),
1575*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_sse2, 10),
1576*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_sse2, 12),
1577*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_sse2, 12),
1578*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_sse2, 12),
1579*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_sse2, 12),
1580*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_sse2, 12),
1581*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_sse2, 12),
1582*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_sse2, 12),
1583*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_sse2, 12),
1584*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_sse2, 12),
1585*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_sse2, 12),
1586*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_sse2, 12),
1587*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1588*fb1b10abSAndroid Build Coastguard Worker };
1589*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, SADavgTest, ::testing::ValuesIn(avg_sse2_tests));
1590*fb1b10abSAndroid Build Coastguard Worker
1591*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_sse2_tests[] = {
1592*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_sse2),
1593*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_sse2),
1594*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_sse2),
1595*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_sse2),
1596*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_sad32x16x4d_sse2),
1597*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_sad16x32x4d_sse2),
1598*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_sse2),
1599*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_sad16x8x4d_sse2),
1600*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_sad8x16x4d_sse2),
1601*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_sad8x8x4d_sse2),
1602*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_sad8x4x4d_sse2),
1603*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_sad4x8x4d_sse2),
1604*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_sad4x4x4d_sse2),
1605*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1606*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_sse2, 8),
1607*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_sse2, 8),
1608*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_sse2, 8),
1609*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_sse2, 8),
1610*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_sse2, 8),
1611*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_sse2, 8),
1612*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_sse2, 8),
1613*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_sse2, 8),
1614*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_sse2, 8),
1615*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_sse2, 8),
1616*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_sse2, 8),
1617*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_sse2, 8),
1618*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_sse2, 8),
1619*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_sse2, 10),
1620*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_sse2, 10),
1621*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_sse2, 10),
1622*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_sse2, 10),
1623*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_sse2, 10),
1624*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_sse2, 10),
1625*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_sse2, 10),
1626*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_sse2, 10),
1627*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_sse2, 10),
1628*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_sse2, 10),
1629*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_sse2, 10),
1630*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_sse2, 10),
1631*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_sse2, 10),
1632*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_sse2, 12),
1633*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_sse2, 12),
1634*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_sse2, 12),
1635*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_sse2, 12),
1636*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_sse2, 12),
1637*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_sse2, 12),
1638*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_sse2, 12),
1639*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_sse2, 12),
1640*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_sse2, 12),
1641*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_sse2, 12),
1642*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_sse2, 12),
1643*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_sse2, 12),
1644*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_sse2, 12),
1645*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1646*fb1b10abSAndroid Build Coastguard Worker };
1647*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, SADx4Test, ::testing::ValuesIn(x4d_sse2_tests));
1648*fb1b10abSAndroid Build Coastguard Worker
1649*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNx4Param skip_x4d_sse2_tests[] = {
1650*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_sad_skip_64x64x4d_sse2),
1651*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_sad_skip_64x32x4d_sse2),
1652*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_sad_skip_32x64x4d_sse2),
1653*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_sad_skip_32x32x4d_sse2),
1654*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_sad_skip_32x16x4d_sse2),
1655*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_sad_skip_16x32x4d_sse2),
1656*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_sad_skip_16x16x4d_sse2),
1657*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_sad_skip_16x8x4d_sse2),
1658*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_sad_skip_8x16x4d_sse2),
1659*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_sad_skip_8x8x4d_sse2),
1660*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_sad_skip_4x8x4d_sse2),
1661*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1662*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_sse2, 8),
1663*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_sse2, 8),
1664*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_sse2, 8),
1665*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_sse2, 8),
1666*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_sse2, 8),
1667*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_sse2, 8),
1668*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_sse2, 8),
1669*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_sse2, 8),
1670*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_sse2, 8),
1671*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_sse2, 8),
1672*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_sse2, 8),
1673*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_sse2, 10),
1674*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_sse2, 10),
1675*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_sse2, 10),
1676*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_sse2, 10),
1677*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_sse2, 10),
1678*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_sse2, 10),
1679*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_sse2, 10),
1680*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_sse2, 10),
1681*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_sse2, 10),
1682*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_sse2, 10),
1683*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_sse2, 10),
1684*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_sse2, 12),
1685*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_sse2, 12),
1686*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_sse2, 12),
1687*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_sse2, 12),
1688*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_sse2, 12),
1689*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_sse2, 12),
1690*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_sse2, 12),
1691*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_sse2, 12),
1692*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 16, &vpx_highbd_sad_skip_8x16x4d_sse2, 12),
1693*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(8, 8, &vpx_highbd_sad_skip_8x8x4d_sse2, 12),
1694*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(4, 8, &vpx_highbd_sad_skip_4x8x4d_sse2, 12),
1695*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1696*fb1b10abSAndroid Build Coastguard Worker };
1697*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, SADSkipx4Test,
1698*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_x4d_sse2_tests));
1699*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_SSE2
1700*fb1b10abSAndroid Build Coastguard Worker
1701*fb1b10abSAndroid Build Coastguard Worker #if HAVE_SSE3
1702*fb1b10abSAndroid Build Coastguard Worker // Only functions are x3, which do not have tests.
1703*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_SSE3
1704*fb1b10abSAndroid Build Coastguard Worker
1705*fb1b10abSAndroid Build Coastguard Worker #if HAVE_SSSE3
1706*fb1b10abSAndroid Build Coastguard Worker // Only functions are x3, which do not have tests.
1707*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_SSSE3
1708*fb1b10abSAndroid Build Coastguard Worker
1709*fb1b10abSAndroid Build Coastguard Worker #if HAVE_AVX2
1710*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam avx2_tests[] = {
1711*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_avx2),
1712*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_avx2),
1713*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_sad32x64_avx2),
1714*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_avx2),
1715*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_sad32x16_avx2),
1716*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1717*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_avx2, 8),
1718*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_avx2, 8),
1719*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_avx2, 8),
1720*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_avx2, 8),
1721*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_avx2, 8),
1722*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_avx2, 8),
1723*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_avx2, 8),
1724*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_avx2, 8),
1725*fb1b10abSAndroid Build Coastguard Worker
1726*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_avx2, 10),
1727*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_avx2, 10),
1728*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_avx2, 10),
1729*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_avx2, 10),
1730*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_avx2, 10),
1731*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_avx2, 10),
1732*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_avx2, 10),
1733*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_avx2, 10),
1734*fb1b10abSAndroid Build Coastguard Worker
1735*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_highbd_sad64x64_avx2, 12),
1736*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_highbd_sad64x32_avx2, 12),
1737*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_highbd_sad32x64_avx2, 12),
1738*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_highbd_sad32x32_avx2, 12),
1739*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_highbd_sad32x16_avx2, 12),
1740*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_highbd_sad16x32_avx2, 12),
1741*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_highbd_sad16x16_avx2, 12),
1742*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_highbd_sad16x8_avx2, 12),
1743*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1744*fb1b10abSAndroid Build Coastguard Worker };
1745*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, SADTest, ::testing::ValuesIn(avx2_tests));
1746*fb1b10abSAndroid Build Coastguard Worker
1747*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNParam skip_avx2_tests[] = {
1748*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_sad_skip_64x64_avx2),
1749*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_sad_skip_64x32_avx2),
1750*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_sad_skip_32x64_avx2),
1751*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_sad_skip_32x32_avx2),
1752*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_sad_skip_32x16_avx2),
1753*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1754*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_avx2, 8),
1755*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_avx2, 8),
1756*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_avx2, 8),
1757*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_avx2, 8),
1758*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_avx2, 8),
1759*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_avx2, 8),
1760*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_avx2, 8),
1761*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_avx2, 8),
1762*fb1b10abSAndroid Build Coastguard Worker
1763*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_avx2, 10),
1764*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_avx2, 10),
1765*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_avx2, 10),
1766*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_avx2, 10),
1767*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_avx2, 10),
1768*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_avx2, 10),
1769*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_avx2, 10),
1770*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_avx2, 10),
1771*fb1b10abSAndroid Build Coastguard Worker
1772*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 64, &vpx_highbd_sad_skip_64x64_avx2, 12),
1773*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(64, 32, &vpx_highbd_sad_skip_64x32_avx2, 12),
1774*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 64, &vpx_highbd_sad_skip_32x64_avx2, 12),
1775*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 32, &vpx_highbd_sad_skip_32x32_avx2, 12),
1776*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(32, 16, &vpx_highbd_sad_skip_32x16_avx2, 12),
1777*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 32, &vpx_highbd_sad_skip_16x32_avx2, 12),
1778*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 16, &vpx_highbd_sad_skip_16x16_avx2, 12),
1779*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNParam(16, 8, &vpx_highbd_sad_skip_16x8_avx2, 12),
1780*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1781*fb1b10abSAndroid Build Coastguard Worker };
1782*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, SADSkipTest,
1783*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_avx2_tests));
1784*fb1b10abSAndroid Build Coastguard Worker
1785*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_avx2_tests[] = {
1786*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_avx2),
1787*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_avx2),
1788*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_avx2),
1789*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_avx2),
1790*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_avx2),
1791*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1792*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_avx2, 8),
1793*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_avx2, 8),
1794*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_avx2, 8),
1795*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_avx2, 8),
1796*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_avx2, 8),
1797*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_avx2, 8),
1798*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_avx2, 8),
1799*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_avx2, 8),
1800*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_avx2, 10),
1801*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_avx2, 10),
1802*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_avx2, 10),
1803*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_avx2, 10),
1804*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_avx2, 10),
1805*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_avx2, 10),
1806*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_avx2, 10),
1807*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_avx2, 10),
1808*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_avx2, 12),
1809*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_avx2, 12),
1810*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_avx2, 12),
1811*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_avx2, 12),
1812*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_avx2, 12),
1813*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_avx2, 12),
1814*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_avx2, 12),
1815*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_avx2, 12),
1816*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1817*fb1b10abSAndroid Build Coastguard Worker };
1818*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, SADavgTest, ::testing::ValuesIn(avg_avx2_tests));
1819*fb1b10abSAndroid Build Coastguard Worker
1820*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_avx2_tests[] = {
1821*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_avx2),
1822*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_avx2),
1823*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1824*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_avx2, 8),
1825*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_avx2, 8),
1826*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_avx2, 8),
1827*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_avx2, 8),
1828*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_avx2, 8),
1829*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_avx2, 8),
1830*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_avx2, 8),
1831*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_avx2, 8),
1832*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_avx2, 10),
1833*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_avx2, 10),
1834*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_avx2, 10),
1835*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_avx2, 10),
1836*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_avx2, 10),
1837*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_avx2, 10),
1838*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_avx2, 10),
1839*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_avx2, 10),
1840*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_avx2, 12),
1841*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_avx2, 12),
1842*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_avx2, 12),
1843*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_avx2, 12),
1844*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_avx2, 12),
1845*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_avx2, 12),
1846*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_avx2, 12),
1847*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_avx2, 12),
1848*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1849*fb1b10abSAndroid Build Coastguard Worker };
1850*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, SADx4Test, ::testing::ValuesIn(x4d_avx2_tests));
1851*fb1b10abSAndroid Build Coastguard Worker
1852*fb1b10abSAndroid Build Coastguard Worker const SadSkipMxNx4Param skip_x4d_avx2_tests[] = {
1853*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_sad_skip_64x64x4d_avx2),
1854*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_sad_skip_64x32x4d_avx2),
1855*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_sad_skip_32x64x4d_avx2),
1856*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_sad_skip_32x32x4d_avx2),
1857*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_sad_skip_32x16x4d_avx2),
1858*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1859*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_avx2, 8),
1860*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_avx2, 8),
1861*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_avx2, 8),
1862*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_avx2, 8),
1863*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_avx2, 8),
1864*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_avx2, 8),
1865*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_avx2, 8),
1866*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_avx2, 8),
1867*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_avx2, 10),
1868*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_avx2, 10),
1869*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_avx2, 10),
1870*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_avx2, 10),
1871*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_avx2, 10),
1872*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_avx2, 10),
1873*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_avx2, 10),
1874*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_avx2, 10),
1875*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 64, &vpx_highbd_sad_skip_64x64x4d_avx2, 12),
1876*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(64, 32, &vpx_highbd_sad_skip_64x32x4d_avx2, 12),
1877*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 64, &vpx_highbd_sad_skip_32x64x4d_avx2, 12),
1878*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 32, &vpx_highbd_sad_skip_32x32x4d_avx2, 12),
1879*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(32, 16, &vpx_highbd_sad_skip_32x16x4d_avx2, 12),
1880*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 32, &vpx_highbd_sad_skip_16x32x4d_avx2, 12),
1881*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 16, &vpx_highbd_sad_skip_16x16x4d_avx2, 12),
1882*fb1b10abSAndroid Build Coastguard Worker SadSkipMxNx4Param(16, 8, &vpx_highbd_sad_skip_16x8x4d_avx2, 12),
1883*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
1884*fb1b10abSAndroid Build Coastguard Worker };
1885*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, SADSkipx4Test,
1886*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(skip_x4d_avx2_tests));
1887*fb1b10abSAndroid Build Coastguard Worker
1888*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_AVX2
1889*fb1b10abSAndroid Build Coastguard Worker
1890*fb1b10abSAndroid Build Coastguard Worker #if HAVE_AVX512
1891*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_avx512_tests[] = {
1892*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_avx512),
1893*fb1b10abSAndroid Build Coastguard Worker };
1894*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX512, SADx4Test,
1895*fb1b10abSAndroid Build Coastguard Worker ::testing::ValuesIn(x4d_avx512_tests));
1896*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_AVX512
1897*fb1b10abSAndroid Build Coastguard Worker
1898*fb1b10abSAndroid Build Coastguard Worker //------------------------------------------------------------------------------
1899*fb1b10abSAndroid Build Coastguard Worker // MIPS functions
1900*fb1b10abSAndroid Build Coastguard Worker #if HAVE_MSA
1901*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam msa_tests[] = {
1902*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_msa),
1903*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_msa),
1904*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_sad32x64_msa),
1905*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_msa),
1906*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_sad32x16_msa),
1907*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_sad16x32_msa),
1908*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_msa),
1909*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_sad16x8_msa),
1910*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_sad8x16_msa),
1911*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_sad8x8_msa),
1912*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_sad8x4_msa),
1913*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_sad4x8_msa),
1914*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_sad4x4_msa),
1915*fb1b10abSAndroid Build Coastguard Worker };
1916*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(MSA, SADTest, ::testing::ValuesIn(msa_tests));
1917*fb1b10abSAndroid Build Coastguard Worker
1918*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_msa_tests[] = {
1919*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_msa),
1920*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_msa),
1921*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_msa),
1922*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_msa),
1923*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_msa),
1924*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_msa),
1925*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_msa),
1926*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_msa),
1927*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_msa),
1928*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_msa),
1929*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_msa),
1930*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_msa),
1931*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_msa),
1932*fb1b10abSAndroid Build Coastguard Worker };
1933*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(MSA, SADavgTest, ::testing::ValuesIn(avg_msa_tests));
1934*fb1b10abSAndroid Build Coastguard Worker
1935*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_msa_tests[] = {
1936*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_msa),
1937*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_msa),
1938*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_msa),
1939*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_msa),
1940*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_sad32x16x4d_msa),
1941*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_sad16x32x4d_msa),
1942*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_msa),
1943*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_sad16x8x4d_msa),
1944*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_sad8x16x4d_msa),
1945*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_sad8x8x4d_msa),
1946*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_sad8x4x4d_msa),
1947*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_sad4x8x4d_msa),
1948*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_sad4x4x4d_msa),
1949*fb1b10abSAndroid Build Coastguard Worker };
1950*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(MSA, SADx4Test, ::testing::ValuesIn(x4d_msa_tests));
1951*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_MSA
1952*fb1b10abSAndroid Build Coastguard Worker
1953*fb1b10abSAndroid Build Coastguard Worker //------------------------------------------------------------------------------
1954*fb1b10abSAndroid Build Coastguard Worker // VSX functions
1955*fb1b10abSAndroid Build Coastguard Worker #if HAVE_VSX
1956*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam vsx_tests[] = {
1957*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_vsx),
1958*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_vsx),
1959*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_sad32x64_vsx),
1960*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_vsx),
1961*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_sad32x16_vsx),
1962*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_sad16x32_vsx),
1963*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_vsx),
1964*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_sad16x8_vsx),
1965*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_sad8x16_vsx),
1966*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_sad8x8_vsx),
1967*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_sad8x4_vsx),
1968*fb1b10abSAndroid Build Coastguard Worker };
1969*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(VSX, SADTest, ::testing::ValuesIn(vsx_tests));
1970*fb1b10abSAndroid Build Coastguard Worker
1971*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_vsx_tests[] = {
1972*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_vsx),
1973*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_vsx),
1974*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_vsx),
1975*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_vsx),
1976*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_vsx),
1977*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_vsx),
1978*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_vsx),
1979*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_vsx),
1980*fb1b10abSAndroid Build Coastguard Worker };
1981*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(VSX, SADavgTest, ::testing::ValuesIn(avg_vsx_tests));
1982*fb1b10abSAndroid Build Coastguard Worker
1983*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_vsx_tests[] = {
1984*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_vsx),
1985*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_vsx),
1986*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_vsx),
1987*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_vsx),
1988*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_sad32x16x4d_vsx),
1989*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_sad16x32x4d_vsx),
1990*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_vsx),
1991*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_sad16x8x4d_vsx),
1992*fb1b10abSAndroid Build Coastguard Worker };
1993*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(VSX, SADx4Test, ::testing::ValuesIn(x4d_vsx_tests));
1994*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_VSX
1995*fb1b10abSAndroid Build Coastguard Worker
1996*fb1b10abSAndroid Build Coastguard Worker //------------------------------------------------------------------------------
1997*fb1b10abSAndroid Build Coastguard Worker // Loongson functions
1998*fb1b10abSAndroid Build Coastguard Worker #if HAVE_MMI
1999*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam mmi_tests[] = {
2000*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_mmi),
2001*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 32, &vpx_sad64x32_mmi),
2002*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 64, &vpx_sad32x64_mmi),
2003*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_mmi),
2004*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 16, &vpx_sad32x16_mmi),
2005*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 32, &vpx_sad16x32_mmi),
2006*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_mmi),
2007*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 8, &vpx_sad16x8_mmi),
2008*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 16, &vpx_sad8x16_mmi),
2009*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_sad8x8_mmi),
2010*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 4, &vpx_sad8x4_mmi),
2011*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 8, &vpx_sad4x8_mmi),
2012*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(4, 4, &vpx_sad4x4_mmi),
2013*fb1b10abSAndroid Build Coastguard Worker };
2014*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(MMI, SADTest, ::testing::ValuesIn(mmi_tests));
2015*fb1b10abSAndroid Build Coastguard Worker
2016*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_mmi_tests[] = {
2017*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_mmi),
2018*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_mmi),
2019*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_mmi),
2020*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_mmi),
2021*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_mmi),
2022*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_mmi),
2023*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_mmi),
2024*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_mmi),
2025*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_mmi),
2026*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_mmi),
2027*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_mmi),
2028*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_mmi),
2029*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_mmi),
2030*fb1b10abSAndroid Build Coastguard Worker };
2031*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(MMI, SADavgTest, ::testing::ValuesIn(avg_mmi_tests));
2032*fb1b10abSAndroid Build Coastguard Worker
2033*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_mmi_tests[] = {
2034*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_mmi),
2035*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_mmi),
2036*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_mmi),
2037*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_mmi),
2038*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 16, &vpx_sad32x16x4d_mmi),
2039*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 32, &vpx_sad16x32x4d_mmi),
2040*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_mmi),
2041*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 8, &vpx_sad16x8x4d_mmi),
2042*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 16, &vpx_sad8x16x4d_mmi),
2043*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_sad8x8x4d_mmi),
2044*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 4, &vpx_sad8x4x4d_mmi),
2045*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 8, &vpx_sad4x8x4d_mmi),
2046*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(4, 4, &vpx_sad4x4x4d_mmi),
2047*fb1b10abSAndroid Build Coastguard Worker };
2048*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(MMI, SADx4Test, ::testing::ValuesIn(x4d_mmi_tests));
2049*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_MMI
2050*fb1b10abSAndroid Build Coastguard Worker
2051*fb1b10abSAndroid Build Coastguard Worker //------------------------------------------------------------------------------
2052*fb1b10abSAndroid Build Coastguard Worker // loongarch functions
2053*fb1b10abSAndroid Build Coastguard Worker #if HAVE_LSX
2054*fb1b10abSAndroid Build Coastguard Worker const SadMxNParam lsx_tests[] = {
2055*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(64, 64, &vpx_sad64x64_lsx),
2056*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(32, 32, &vpx_sad32x32_lsx),
2057*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(16, 16, &vpx_sad16x16_lsx),
2058*fb1b10abSAndroid Build Coastguard Worker SadMxNParam(8, 8, &vpx_sad8x8_lsx),
2059*fb1b10abSAndroid Build Coastguard Worker };
2060*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(LSX, SADTest, ::testing::ValuesIn(lsx_tests));
2061*fb1b10abSAndroid Build Coastguard Worker
2062*fb1b10abSAndroid Build Coastguard Worker const SadMxNAvgParam avg_lsx_tests[] = {
2063*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_lsx),
2064*fb1b10abSAndroid Build Coastguard Worker SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_lsx),
2065*fb1b10abSAndroid Build Coastguard Worker };
2066*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(LSX, SADavgTest, ::testing::ValuesIn(avg_lsx_tests));
2067*fb1b10abSAndroid Build Coastguard Worker
2068*fb1b10abSAndroid Build Coastguard Worker const SadMxNx4Param x4d_lsx_tests[] = {
2069*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 64, &vpx_sad64x64x4d_lsx),
2070*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(64, 32, &vpx_sad64x32x4d_lsx),
2071*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 64, &vpx_sad32x64x4d_lsx),
2072*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(32, 32, &vpx_sad32x32x4d_lsx),
2073*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(16, 16, &vpx_sad16x16x4d_lsx),
2074*fb1b10abSAndroid Build Coastguard Worker SadMxNx4Param(8, 8, &vpx_sad8x8x4d_lsx),
2075*fb1b10abSAndroid Build Coastguard Worker };
2076*fb1b10abSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(LSX, SADx4Test, ::testing::ValuesIn(x4d_lsx_tests));
2077*fb1b10abSAndroid Build Coastguard Worker #endif // HAVE_LSX
2078*fb1b10abSAndroid Build Coastguard Worker
2079*fb1b10abSAndroid Build Coastguard Worker } // namespace
2080