Coverage Report

Created: 2026-09-07 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/aom/aom_dsp/x86/obmc_variance_sse4.c
Line
Count
Source
1
/*
2
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3
 *
4
 * This source code is subject to the terms of the BSD 2 Clause License and
5
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6
 * was not distributed with this source code in the LICENSE file, you can
7
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8
 * Media Patent License 1.0 was not distributed with this source code in the
9
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10
 */
11
12
#include <assert.h>
13
#include <immintrin.h>
14
15
#include "config/aom_config.h"
16
#include "config/aom_dsp_rtcd.h"
17
18
#include "aom_ports/mem.h"
19
#include "aom/aom_integer.h"
20
21
#include "aom_dsp/aom_dsp_common.h"
22
#include "aom_dsp/aom_filter.h"
23
#include "aom_dsp/x86/obmc_intrinsic_sse4.h"
24
#include "aom_dsp/x86/synonyms.h"
25
#include "aom_dsp/x86/variance_impl_ssse3.h"
26
27
////////////////////////////////////////////////////////////////////////////////
28
// 8 bit
29
////////////////////////////////////////////////////////////////////////////////
30
31
static inline void obmc_variance_w8n(const uint8_t *pre, const int pre_stride,
32
                                     const int32_t *wsrc, const int32_t *mask,
33
                                     unsigned int *const sse, int *const sum,
34
0
                                     const int w, const int h) {
35
0
  const int pre_step = pre_stride - w;
36
0
  int n = 0;
37
0
  __m128i v_sum_d = _mm_setzero_si128();
38
0
  __m128i v_sse_d = _mm_setzero_si128();
39
40
0
  assert(w >= 8);
41
0
  assert(IS_POWER_OF_TWO(w));
42
0
  assert(IS_POWER_OF_TWO(h));
43
44
0
  do {
45
0
    const __m128i v_p1_b = xx_loadl_32(pre + n + 4);
46
0
    const __m128i v_m1_d = xx_load_128(mask + n + 4);
47
0
    const __m128i v_w1_d = xx_load_128(wsrc + n + 4);
48
0
    const __m128i v_p0_b = xx_loadl_32(pre + n);
49
0
    const __m128i v_m0_d = xx_load_128(mask + n);
50
0
    const __m128i v_w0_d = xx_load_128(wsrc + n);
51
52
0
    const __m128i v_p0_d = _mm_cvtepu8_epi32(v_p0_b);
53
0
    const __m128i v_p1_d = _mm_cvtepu8_epi32(v_p1_b);
54
55
    // Values in both pre and mask fit in 15 bits, and are packed at 32 bit
56
    // boundaries. We use pmaddwd, as it has lower latency on Haswell
57
    // than pmulld but produces the same result with these inputs.
58
0
    const __m128i v_pm0_d = _mm_madd_epi16(v_p0_d, v_m0_d);
59
0
    const __m128i v_pm1_d = _mm_madd_epi16(v_p1_d, v_m1_d);
60
61
0
    const __m128i v_diff0_d = _mm_sub_epi32(v_w0_d, v_pm0_d);
62
0
    const __m128i v_diff1_d = _mm_sub_epi32(v_w1_d, v_pm1_d);
63
64
0
    const __m128i v_rdiff0_d = xx_roundn_epi32(v_diff0_d, 12);
65
0
    const __m128i v_rdiff1_d = xx_roundn_epi32(v_diff1_d, 12);
66
0
    const __m128i v_rdiff01_w = _mm_packs_epi32(v_rdiff0_d, v_rdiff1_d);
67
0
    const __m128i v_sqrdiff_d = _mm_madd_epi16(v_rdiff01_w, v_rdiff01_w);
68
69
0
    v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff0_d);
70
0
    v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff1_d);
71
0
    v_sse_d = _mm_add_epi32(v_sse_d, v_sqrdiff_d);
72
73
0
    n += 8;
74
75
0
    if (n % w == 0) pre += pre_step;
76
0
  } while (n < w * h);
77
78
0
  *sum = xx_hsum_epi32_si32(v_sum_d);
79
0
  *sse = xx_hsum_epi32_si32(v_sse_d);
80
0
}
81
82
#define OBMCVARWXH(W, H)                                               \
83
  unsigned int aom_obmc_variance##W##x##H##_sse4_1(                    \
84
      const uint8_t *pre, int pre_stride, const int32_t *wsrc,         \
85
0
      const int32_t *mask, unsigned int *sse) {                        \
86
0
    int sum;                                                           \
87
0
    if (W == 4) {                                                      \
88
0
      obmc_variance_w4(pre, pre_stride, wsrc, mask, sse, &sum, H);     \
89
0
    } else {                                                           \
90
0
      obmc_variance_w8n(pre, pre_stride, wsrc, mask, sse, &sum, W, H); \
91
0
    }                                                                  \
92
0
    return *sse - (unsigned int)(((int64_t)sum * sum) / (W * H));      \
93
0
  }
Unexecuted instantiation: aom_obmc_variance128x128_sse4_1
Unexecuted instantiation: aom_obmc_variance128x64_sse4_1
Unexecuted instantiation: aom_obmc_variance64x128_sse4_1
Unexecuted instantiation: aom_obmc_variance64x64_sse4_1
Unexecuted instantiation: aom_obmc_variance64x32_sse4_1
Unexecuted instantiation: aom_obmc_variance32x64_sse4_1
Unexecuted instantiation: aom_obmc_variance32x32_sse4_1
Unexecuted instantiation: aom_obmc_variance32x16_sse4_1
Unexecuted instantiation: aom_obmc_variance16x32_sse4_1
Unexecuted instantiation: aom_obmc_variance16x16_sse4_1
Unexecuted instantiation: aom_obmc_variance16x8_sse4_1
Unexecuted instantiation: aom_obmc_variance8x16_sse4_1
Unexecuted instantiation: aom_obmc_variance8x8_sse4_1
Unexecuted instantiation: aom_obmc_variance8x4_sse4_1
Unexecuted instantiation: aom_obmc_variance4x8_sse4_1
Unexecuted instantiation: aom_obmc_variance4x4_sse4_1
Unexecuted instantiation: aom_obmc_variance4x16_sse4_1
Unexecuted instantiation: aom_obmc_variance16x4_sse4_1
Unexecuted instantiation: aom_obmc_variance8x32_sse4_1
Unexecuted instantiation: aom_obmc_variance32x8_sse4_1
Unexecuted instantiation: aom_obmc_variance16x64_sse4_1
Unexecuted instantiation: aom_obmc_variance64x16_sse4_1
94
95
OBMCVARWXH(128, 128)
96
OBMCVARWXH(128, 64)
97
OBMCVARWXH(64, 128)
98
OBMCVARWXH(64, 64)
99
OBMCVARWXH(64, 32)
100
OBMCVARWXH(32, 64)
101
OBMCVARWXH(32, 32)
102
OBMCVARWXH(32, 16)
103
OBMCVARWXH(16, 32)
104
OBMCVARWXH(16, 16)
105
OBMCVARWXH(16, 8)
106
OBMCVARWXH(8, 16)
107
OBMCVARWXH(8, 8)
108
OBMCVARWXH(8, 4)
109
OBMCVARWXH(4, 8)
110
OBMCVARWXH(4, 4)
111
OBMCVARWXH(4, 16)
112
OBMCVARWXH(16, 4)
113
OBMCVARWXH(8, 32)
114
OBMCVARWXH(32, 8)
115
OBMCVARWXH(16, 64)
116
OBMCVARWXH(64, 16)
117
118
#include "config/aom_dsp_rtcd.h"
119
120
#define OBMC_SUBPIX_VAR(W, H)                                                \
121
  uint32_t aom_obmc_sub_pixel_variance##W##x##H##_sse4_1(                    \
122
      const uint8_t *pre, int pre_stride, int xoffset, int yoffset,          \
123
0
      const int32_t *wsrc, const int32_t *mask, unsigned int *sse) {         \
124
0
    uint16_t fdata3[(H + 1) * W];                                            \
125
0
    uint8_t temp2[H * W];                                                    \
126
0
                                                                             \
127
0
    aom_var_filter_block2d_bil_first_pass_ssse3(                             \
128
0
        pre, fdata3, pre_stride, 1, H + 1, W, bilinear_filters_2t[xoffset]); \
129
0
    aom_var_filter_block2d_bil_second_pass_ssse3(                            \
130
0
        fdata3, temp2, W, W, H, W, bilinear_filters_2t[yoffset]);            \
131
0
                                                                             \
132
0
    return aom_obmc_variance##W##x##H##_sse4_1(temp2, W, wsrc, mask, sse);   \
133
0
  }
Unexecuted instantiation: aom_obmc_sub_pixel_variance128x128_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance128x64_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance64x128_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance64x64_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance64x32_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance32x64_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance32x32_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance32x16_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance16x32_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance16x16_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance16x8_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance8x16_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance8x8_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance8x4_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance4x8_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance4x4_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance4x16_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance16x4_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance8x32_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance32x8_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance16x64_sse4_1
Unexecuted instantiation: aom_obmc_sub_pixel_variance64x16_sse4_1
134
135
OBMC_SUBPIX_VAR(128, 128)
136
OBMC_SUBPIX_VAR(128, 64)
137
OBMC_SUBPIX_VAR(64, 128)
138
OBMC_SUBPIX_VAR(64, 64)
139
OBMC_SUBPIX_VAR(64, 32)
140
OBMC_SUBPIX_VAR(32, 64)
141
OBMC_SUBPIX_VAR(32, 32)
142
OBMC_SUBPIX_VAR(32, 16)
143
OBMC_SUBPIX_VAR(16, 32)
144
OBMC_SUBPIX_VAR(16, 16)
145
OBMC_SUBPIX_VAR(16, 8)
146
OBMC_SUBPIX_VAR(8, 16)
147
OBMC_SUBPIX_VAR(8, 8)
148
OBMC_SUBPIX_VAR(8, 4)
149
OBMC_SUBPIX_VAR(4, 8)
150
OBMC_SUBPIX_VAR(4, 4)
151
OBMC_SUBPIX_VAR(4, 16)
152
OBMC_SUBPIX_VAR(16, 4)
153
OBMC_SUBPIX_VAR(8, 32)
154
OBMC_SUBPIX_VAR(32, 8)
155
OBMC_SUBPIX_VAR(16, 64)
156
OBMC_SUBPIX_VAR(64, 16)
157
158
////////////////////////////////////////////////////////////////////////////////
159
// High bit-depth
160
////////////////////////////////////////////////////////////////////////////////
161
#if CONFIG_AV1_HIGHBITDEPTH
162
static inline void hbd_obmc_variance_w4(
163
    const uint8_t *pre8, const int pre_stride, const int32_t *wsrc,
164
0
    const int32_t *mask, uint64_t *const sse, int64_t *const sum, const int h) {
165
0
  const uint16_t *pre = CONVERT_TO_SHORTPTR(pre8);
166
0
  const int pre_step = pre_stride - 4;
167
0
  int n = 0;
168
0
  __m128i v_sum_d = _mm_setzero_si128();
169
0
  __m128i v_sse_d = _mm_setzero_si128();
170
171
0
  assert(IS_POWER_OF_TWO(h));
172
173
0
  do {
174
0
    const __m128i v_p_w = xx_loadl_64(pre + n);
175
0
    const __m128i v_m_d = xx_load_128(mask + n);
176
0
    const __m128i v_w_d = xx_load_128(wsrc + n);
177
178
0
    const __m128i v_p_d = _mm_cvtepu16_epi32(v_p_w);
179
180
    // Values in both pre and mask fit in 15 bits, and are packed at 32 bit
181
    // boundaries. We use pmaddwd, as it has lower latency on Haswell
182
    // than pmulld but produces the same result with these inputs.
183
0
    const __m128i v_pm_d = _mm_madd_epi16(v_p_d, v_m_d);
184
185
0
    const __m128i v_diff_d = _mm_sub_epi32(v_w_d, v_pm_d);
186
0
    const __m128i v_rdiff_d = xx_roundn_epi32(v_diff_d, 12);
187
0
    const __m128i v_sqrdiff_d = _mm_mullo_epi32(v_rdiff_d, v_rdiff_d);
188
189
0
    v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff_d);
190
0
    v_sse_d = _mm_add_epi32(v_sse_d, v_sqrdiff_d);
191
192
0
    n += 4;
193
194
0
    if (n % 4 == 0) pre += pre_step;
195
0
  } while (n < 4 * h);
196
197
0
  *sum = xx_hsum_epi32_si32(v_sum_d);
198
0
  *sse = xx_hsum_epi32_si32(v_sse_d);
199
0
}
200
201
static inline void hbd_obmc_variance_w8n(
202
    const uint8_t *pre8, const int pre_stride, const int32_t *wsrc,
203
    const int32_t *mask, uint64_t *const sse, int64_t *const sum, const int w,
204
0
    const int h) {
205
0
  const uint16_t *pre = CONVERT_TO_SHORTPTR(pre8);
206
0
  const int pre_step = pre_stride - w;
207
0
  int n = 0;
208
0
  __m128i v_sum_d = _mm_setzero_si128();
209
0
  __m128i v_sse_d = _mm_setzero_si128();
210
211
0
  assert(w >= 8);
212
0
  assert(IS_POWER_OF_TWO(w));
213
0
  assert(IS_POWER_OF_TWO(h));
214
215
0
  do {
216
0
    const __m128i v_p1_w = xx_loadl_64(pre + n + 4);
217
0
    const __m128i v_m1_d = xx_load_128(mask + n + 4);
218
0
    const __m128i v_w1_d = xx_load_128(wsrc + n + 4);
219
0
    const __m128i v_p0_w = xx_loadl_64(pre + n);
220
0
    const __m128i v_m0_d = xx_load_128(mask + n);
221
0
    const __m128i v_w0_d = xx_load_128(wsrc + n);
222
223
0
    const __m128i v_p0_d = _mm_cvtepu16_epi32(v_p0_w);
224
0
    const __m128i v_p1_d = _mm_cvtepu16_epi32(v_p1_w);
225
226
    // Values in both pre and mask fit in 15 bits, and are packed at 32 bit
227
    // boundaries. We use pmaddwd, as it has lower latency on Haswell
228
    // than pmulld but produces the same result with these inputs.
229
0
    const __m128i v_pm0_d = _mm_madd_epi16(v_p0_d, v_m0_d);
230
0
    const __m128i v_pm1_d = _mm_madd_epi16(v_p1_d, v_m1_d);
231
232
0
    const __m128i v_diff0_d = _mm_sub_epi32(v_w0_d, v_pm0_d);
233
0
    const __m128i v_diff1_d = _mm_sub_epi32(v_w1_d, v_pm1_d);
234
235
0
    const __m128i v_rdiff0_d = xx_roundn_epi32(v_diff0_d, 12);
236
0
    const __m128i v_rdiff1_d = xx_roundn_epi32(v_diff1_d, 12);
237
0
    const __m128i v_rdiff01_w = _mm_packs_epi32(v_rdiff0_d, v_rdiff1_d);
238
0
    const __m128i v_sqrdiff_d = _mm_madd_epi16(v_rdiff01_w, v_rdiff01_w);
239
240
0
    v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff0_d);
241
0
    v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff1_d);
242
0
    v_sse_d = _mm_add_epi32(v_sse_d, v_sqrdiff_d);
243
244
0
    n += 8;
245
246
0
    if (n % w == 0) pre += pre_step;
247
0
  } while (n < w * h);
248
249
0
  *sum += xx_hsum_epi32_si64(v_sum_d);
250
0
  *sse += xx_hsum_epi32_si64(v_sse_d);
251
0
}
252
253
static inline void highbd_8_obmc_variance(const uint8_t *pre8, int pre_stride,
254
                                          const int32_t *wsrc,
255
                                          const int32_t *mask, int w, int h,
256
0
                                          unsigned int *sse, int *sum) {
257
0
  int64_t sum64 = 0;
258
0
  uint64_t sse64 = 0;
259
0
  if (w == 4) {
260
0
    hbd_obmc_variance_w4(pre8, pre_stride, wsrc, mask, &sse64, &sum64, h);
261
0
  } else {
262
0
    hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, h);
263
0
  }
264
0
  *sum = (int)sum64;
265
0
  *sse = (unsigned int)sse64;
266
0
}
267
268
static inline void highbd_10_obmc_variance(const uint8_t *pre8, int pre_stride,
269
                                           const int32_t *wsrc,
270
                                           const int32_t *mask, int w, int h,
271
0
                                           unsigned int *sse, int *sum) {
272
0
  int64_t sum64 = 0;
273
0
  uint64_t sse64 = 0;
274
0
  if (w == 4) {
275
0
    hbd_obmc_variance_w4(pre8, pre_stride, wsrc, mask, &sse64, &sum64, h);
276
0
  } else if (w < 128 || h < 128) {
277
0
    hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, h);
278
0
  } else {
279
0
    assert(w == 128 && h == 128);
280
281
0
    do {
282
0
      hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w,
283
0
                            64);
284
0
      pre8 += 64 * pre_stride;
285
0
      wsrc += 64 * w;
286
0
      mask += 64 * w;
287
0
      h -= 64;
288
0
    } while (h > 0);
289
0
  }
290
0
  *sum = (int)ROUND_POWER_OF_TWO(sum64, 2);
291
0
  *sse = (unsigned int)ROUND_POWER_OF_TWO(sse64, 4);
292
0
}
293
294
static inline void highbd_12_obmc_variance(const uint8_t *pre8, int pre_stride,
295
                                           const int32_t *wsrc,
296
                                           const int32_t *mask, int w, int h,
297
0
                                           unsigned int *sse, int *sum) {
298
0
  int64_t sum64 = 0;
299
0
  uint64_t sse64 = 0;
300
0
  int max_pel_allowed_per_ovf = 512;
301
0
  if (w == 4) {
302
0
    hbd_obmc_variance_w4(pre8, pre_stride, wsrc, mask, &sse64, &sum64, h);
303
0
  } else if (w * h <= max_pel_allowed_per_ovf) {
304
0
    hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, h);
305
0
  } else {
306
0
    int h_per_ovf = max_pel_allowed_per_ovf / w;
307
308
0
    assert(max_pel_allowed_per_ovf % w == 0);
309
0
    do {
310
0
      hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w,
311
0
                            h_per_ovf);
312
0
      pre8 += h_per_ovf * pre_stride;
313
0
      wsrc += h_per_ovf * w;
314
0
      mask += h_per_ovf * w;
315
0
      h -= h_per_ovf;
316
0
    } while (h > 0);
317
0
  }
318
0
  *sum = (int)ROUND_POWER_OF_TWO(sum64, 4);
319
0
  *sse = (unsigned int)ROUND_POWER_OF_TWO(sse64, 8);
320
0
}
321
322
#define HBD_OBMCVARWXH(W, H)                                               \
323
  unsigned int aom_highbd_8_obmc_variance##W##x##H##_sse4_1(               \
324
      const uint8_t *pre, int pre_stride, const int32_t *wsrc,             \
325
0
      const int32_t *mask, unsigned int *sse) {                            \
326
0
    int sum;                                                               \
327
0
    highbd_8_obmc_variance(pre, pre_stride, wsrc, mask, W, H, sse, &sum);  \
328
0
    return *sse - (unsigned int)(((int64_t)sum * sum) / (W * H));          \
329
0
  }                                                                        \
Unexecuted instantiation: aom_highbd_8_obmc_variance128x128_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance128x64_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance64x128_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance64x64_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance64x32_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance32x64_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance32x32_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance32x16_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance16x32_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance16x16_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance16x8_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance8x16_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance8x8_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance8x4_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance4x8_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance4x4_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance4x16_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance16x4_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance8x32_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance32x8_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance16x64_sse4_1
Unexecuted instantiation: aom_highbd_8_obmc_variance64x16_sse4_1
330
                                                                           \
331
  unsigned int aom_highbd_10_obmc_variance##W##x##H##_sse4_1(              \
332
      const uint8_t *pre, int pre_stride, const int32_t *wsrc,             \
333
0
      const int32_t *mask, unsigned int *sse) {                            \
334
0
    int sum;                                                               \
335
0
    int64_t var;                                                           \
336
0
    highbd_10_obmc_variance(pre, pre_stride, wsrc, mask, W, H, sse, &sum); \
337
0
    var = (int64_t)(*sse) - (((int64_t)sum * sum) / (W * H));              \
338
0
    return (var >= 0) ? (uint32_t)var : 0;                                 \
339
0
  }                                                                        \
Unexecuted instantiation: aom_highbd_10_obmc_variance128x128_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance128x64_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance64x128_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance64x64_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance64x32_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance32x64_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance32x32_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance32x16_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance16x32_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance16x16_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance16x8_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance8x16_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance8x8_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance8x4_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance4x8_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance4x4_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance4x16_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance16x4_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance8x32_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance32x8_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance16x64_sse4_1
Unexecuted instantiation: aom_highbd_10_obmc_variance64x16_sse4_1
340
                                                                           \
341
  unsigned int aom_highbd_12_obmc_variance##W##x##H##_sse4_1(              \
342
      const uint8_t *pre, int pre_stride, const int32_t *wsrc,             \
343
0
      const int32_t *mask, unsigned int *sse) {                            \
344
0
    int sum;                                                               \
345
0
    int64_t var;                                                           \
346
0
    highbd_12_obmc_variance(pre, pre_stride, wsrc, mask, W, H, sse, &sum); \
347
0
    var = (int64_t)(*sse) - (((int64_t)sum * sum) / (W * H));              \
348
0
    return (var >= 0) ? (uint32_t)var : 0;                                 \
349
0
  }
Unexecuted instantiation: aom_highbd_12_obmc_variance128x128_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance128x64_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance64x128_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance64x64_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance64x32_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance32x64_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance32x32_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance32x16_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance16x32_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance16x16_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance16x8_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance8x16_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance8x8_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance8x4_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance4x8_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance4x4_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance4x16_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance16x4_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance8x32_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance32x8_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance16x64_sse4_1
Unexecuted instantiation: aom_highbd_12_obmc_variance64x16_sse4_1
350
351
HBD_OBMCVARWXH(128, 128)
352
HBD_OBMCVARWXH(128, 64)
353
HBD_OBMCVARWXH(64, 128)
354
HBD_OBMCVARWXH(64, 64)
355
HBD_OBMCVARWXH(64, 32)
356
HBD_OBMCVARWXH(32, 64)
357
HBD_OBMCVARWXH(32, 32)
358
HBD_OBMCVARWXH(32, 16)
359
HBD_OBMCVARWXH(16, 32)
360
HBD_OBMCVARWXH(16, 16)
361
HBD_OBMCVARWXH(16, 8)
362
HBD_OBMCVARWXH(8, 16)
363
HBD_OBMCVARWXH(8, 8)
364
HBD_OBMCVARWXH(8, 4)
365
HBD_OBMCVARWXH(4, 8)
366
HBD_OBMCVARWXH(4, 4)
367
HBD_OBMCVARWXH(4, 16)
368
HBD_OBMCVARWXH(16, 4)
369
HBD_OBMCVARWXH(8, 32)
370
HBD_OBMCVARWXH(32, 8)
371
HBD_OBMCVARWXH(16, 64)
372
HBD_OBMCVARWXH(64, 16)
373
#endif  // CONFIG_AV1_HIGHBITDEPTH