Coverage Report

Created: 2026-10-28 08:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libvpx/vpx_dsp/x86/highbd_variance_sse2.c
Line
Count
Source
1
/*
2
 *  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5
 *  that can be found in the LICENSE file in the root of the source
6
 *  tree. An additional intellectual property rights grant can be found
7
 *  in the file PATENTS.  All contributing project authors may
8
 *  be found in the AUTHORS file in the root of the source tree.
9
 */
10
#include <emmintrin.h>  // SSE2
11
12
#include "./vpx_config.h"
13
#include "./vpx_dsp_rtcd.h"
14
#include "vpx_ports/mem.h"
15
16
#if HAVE_X86_ASM
17
typedef uint32_t (*high_variance_fn_t)(const uint16_t *src, int src_stride,
18
                                       const uint16_t *ref, int ref_stride,
19
                                       uint32_t *sse, int *sum);
20
21
uint32_t vpx_highbd_calc8x8var_sse2(const uint16_t *src, int src_stride,
22
                                    const uint16_t *ref, int ref_stride,
23
                                    uint32_t *sse, int *sum);
24
25
uint32_t vpx_highbd_calc16x16var_sse2(const uint16_t *src, int src_stride,
26
                                      const uint16_t *ref, int ref_stride,
27
                                      uint32_t *sse, int *sum);
28
29
static void highbd_8_variance_sse2(const uint16_t *src, int src_stride,
30
                                   const uint16_t *ref, int ref_stride, int w,
31
                                   int h, uint32_t *sse, int *sum,
32
0
                                   high_variance_fn_t var_fn, int block_size) {
33
0
  int i, j;
34
35
0
  *sse = 0;
36
0
  *sum = 0;
37
38
0
  for (i = 0; i < h; i += block_size) {
39
0
    for (j = 0; j < w; j += block_size) {
40
0
      unsigned int sse0;
41
0
      int sum0;
42
0
      var_fn(src + src_stride * i + j, src_stride, ref + ref_stride * i + j,
43
0
             ref_stride, &sse0, &sum0);
44
0
      *sse += sse0;
45
0
      *sum += sum0;
46
0
    }
47
0
  }
48
0
}
49
50
static void highbd_10_variance_sse2(const uint16_t *src, int src_stride,
51
                                    const uint16_t *ref, int ref_stride, int w,
52
                                    int h, uint32_t *sse, int *sum,
53
756k
                                    high_variance_fn_t var_fn, int block_size) {
54
756k
  int i, j;
55
756k
  uint64_t sse_long = 0;
56
756k
  int32_t sum_long = 0;
57
58
1.65M
  for (i = 0; i < h; i += block_size) {
59
2.09M
    for (j = 0; j < w; j += block_size) {
60
1.20M
      unsigned int sse0;
61
1.20M
      int sum0;
62
1.20M
      var_fn(src + src_stride * i + j, src_stride, ref + ref_stride * i + j,
63
1.20M
             ref_stride, &sse0, &sum0);
64
1.20M
      sse_long += sse0;
65
1.20M
      sum_long += sum0;
66
1.20M
    }
67
894k
  }
68
756k
  *sum = ROUND_POWER_OF_TWO(sum_long, 2);
69
756k
  *sse = (uint32_t)ROUND_POWER_OF_TWO(sse_long, 4);
70
756k
}
71
72
static void highbd_12_variance_sse2(const uint16_t *src, int src_stride,
73
                                    const uint16_t *ref, int ref_stride, int w,
74
                                    int h, uint32_t *sse, int *sum,
75
1.68M
                                    high_variance_fn_t var_fn, int block_size) {
76
1.68M
  int i, j;
77
1.68M
  uint64_t sse_long = 0;
78
1.68M
  int32_t sum_long = 0;
79
80
3.50M
  for (i = 0; i < h; i += block_size) {
81
4.01M
    for (j = 0; j < w; j += block_size) {
82
2.19M
      unsigned int sse0;
83
2.19M
      int sum0;
84
2.19M
      var_fn(src + src_stride * i + j, src_stride, ref + ref_stride * i + j,
85
2.19M
             ref_stride, &sse0, &sum0);
86
2.19M
      sse_long += sse0;
87
2.19M
      sum_long += sum0;
88
2.19M
    }
89
1.82M
  }
90
1.68M
  *sum = ROUND_POWER_OF_TWO(sum_long, 4);
91
1.68M
  *sse = (uint32_t)ROUND_POWER_OF_TWO(sse_long, 8);
92
1.68M
}
93
94
#define HIGH_GET_VAR(S)                                                       \
95
  void vpx_highbd_8_get##S##x##S##var_sse2(                                   \
96
      const uint8_t *src8, int src_stride, const uint8_t *ref8,               \
97
0
      int ref_stride, uint32_t *sse, int *sum) {                              \
98
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                \
99
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                \
100
0
    vpx_highbd_calc##S##x##S##var_sse2(src, src_stride, ref, ref_stride, sse, \
101
0
                                       sum);                                  \
102
0
  }                                                                           \
Unexecuted instantiation: vpx_highbd_8_get16x16var_sse2
Unexecuted instantiation: vpx_highbd_8_get8x8var_sse2
103
                                                                              \
104
  void vpx_highbd_10_get##S##x##S##var_sse2(                                  \
105
      const uint8_t *src8, int src_stride, const uint8_t *ref8,               \
106
0
      int ref_stride, uint32_t *sse, int *sum) {                              \
107
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                \
108
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                \
109
0
    vpx_highbd_calc##S##x##S##var_sse2(src, src_stride, ref, ref_stride, sse, \
110
0
                                       sum);                                  \
111
0
    *sum = ROUND_POWER_OF_TWO(*sum, 2);                                       \
112
0
    *sse = ROUND_POWER_OF_TWO(*sse, 4);                                       \
113
0
  }                                                                           \
Unexecuted instantiation: vpx_highbd_10_get16x16var_sse2
Unexecuted instantiation: vpx_highbd_10_get8x8var_sse2
114
                                                                              \
115
  void vpx_highbd_12_get##S##x##S##var_sse2(                                  \
116
      const uint8_t *src8, int src_stride, const uint8_t *ref8,               \
117
0
      int ref_stride, uint32_t *sse, int *sum) {                              \
118
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                \
119
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                \
120
0
    vpx_highbd_calc##S##x##S##var_sse2(src, src_stride, ref, ref_stride, sse, \
121
0
                                       sum);                                  \
122
0
    *sum = ROUND_POWER_OF_TWO(*sum, 4);                                       \
123
0
    *sse = ROUND_POWER_OF_TWO(*sse, 8);                                       \
124
0
  }
Unexecuted instantiation: vpx_highbd_12_get16x16var_sse2
Unexecuted instantiation: vpx_highbd_12_get8x8var_sse2
125
126
HIGH_GET_VAR(16)
127
HIGH_GET_VAR(8)
128
129
#undef HIGH_GET_VAR
130
131
#define VAR_FN(w, h, block_size, shift)                                    \
132
  uint32_t vpx_highbd_8_variance##w##x##h##_sse2(                          \
133
      const uint8_t *src8, int src_stride, const uint8_t *ref8,            \
134
0
      int ref_stride, uint32_t *sse) {                                     \
135
0
    int sum;                                                               \
136
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
137
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
138
0
    highbd_8_variance_sse2(                                                \
139
0
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
140
0
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
141
0
    return *sse - (uint32_t)(((int64_t)sum * sum) >> (shift));             \
142
0
  }                                                                        \
Unexecuted instantiation: vpx_highbd_8_variance64x64_sse2
Unexecuted instantiation: vpx_highbd_8_variance64x32_sse2
Unexecuted instantiation: vpx_highbd_8_variance32x64_sse2
Unexecuted instantiation: vpx_highbd_8_variance32x32_sse2
Unexecuted instantiation: vpx_highbd_8_variance32x16_sse2
Unexecuted instantiation: vpx_highbd_8_variance16x32_sse2
Unexecuted instantiation: vpx_highbd_8_variance16x16_sse2
Unexecuted instantiation: vpx_highbd_8_variance16x8_sse2
Unexecuted instantiation: vpx_highbd_8_variance8x16_sse2
Unexecuted instantiation: vpx_highbd_8_variance8x8_sse2
143
                                                                           \
144
  uint32_t vpx_highbd_10_variance##w##x##h##_sse2(                         \
145
      const uint8_t *src8, int src_stride, const uint8_t *ref8,            \
146
756k
      int ref_stride, uint32_t *sse) {                                     \
147
756k
    int sum;                                                               \
148
756k
    int64_t var;                                                           \
149
756k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
756k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
756k
    highbd_10_variance_sse2(                                               \
152
756k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
756k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
756k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
756k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
756k
  }                                                                        \
vpx_highbd_10_variance64x64_sse2
Line
Count
Source
146
9.45k
      int ref_stride, uint32_t *sse) {                                     \
147
9.45k
    int sum;                                                               \
148
9.45k
    int64_t var;                                                           \
149
9.45k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
9.45k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
9.45k
    highbd_10_variance_sse2(                                               \
152
9.45k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
9.45k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
9.45k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
9.45k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
9.45k
  }                                                                        \
vpx_highbd_10_variance64x32_sse2
Line
Count
Source
146
4.27k
      int ref_stride, uint32_t *sse) {                                     \
147
4.27k
    int sum;                                                               \
148
4.27k
    int64_t var;                                                           \
149
4.27k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
4.27k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
4.27k
    highbd_10_variance_sse2(                                               \
152
4.27k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
4.27k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
4.27k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
4.27k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
4.27k
  }                                                                        \
vpx_highbd_10_variance32x64_sse2
Line
Count
Source
146
3.96k
      int ref_stride, uint32_t *sse) {                                     \
147
3.96k
    int sum;                                                               \
148
3.96k
    int64_t var;                                                           \
149
3.96k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
3.96k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
3.96k
    highbd_10_variance_sse2(                                               \
152
3.96k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
3.96k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
3.96k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
3.96k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
3.96k
  }                                                                        \
vpx_highbd_10_variance32x32_sse2
Line
Count
Source
146
69.7k
      int ref_stride, uint32_t *sse) {                                     \
147
69.7k
    int sum;                                                               \
148
69.7k
    int64_t var;                                                           \
149
69.7k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
69.7k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
69.7k
    highbd_10_variance_sse2(                                               \
152
69.7k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
69.7k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
69.7k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
69.7k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
69.7k
  }                                                                        \
vpx_highbd_10_variance32x16_sse2
Line
Count
Source
146
6.43k
      int ref_stride, uint32_t *sse) {                                     \
147
6.43k
    int sum;                                                               \
148
6.43k
    int64_t var;                                                           \
149
6.43k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
6.43k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
6.43k
    highbd_10_variance_sse2(                                               \
152
6.43k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
6.43k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
6.43k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
6.43k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
6.43k
  }                                                                        \
vpx_highbd_10_variance16x32_sse2
Line
Count
Source
146
6.28k
      int ref_stride, uint32_t *sse) {                                     \
147
6.28k
    int sum;                                                               \
148
6.28k
    int64_t var;                                                           \
149
6.28k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
6.28k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
6.28k
    highbd_10_variance_sse2(                                               \
152
6.28k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
6.28k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
6.28k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
6.28k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
6.28k
  }                                                                        \
vpx_highbd_10_variance16x16_sse2
Line
Count
Source
146
146k
      int ref_stride, uint32_t *sse) {                                     \
147
146k
    int sum;                                                               \
148
146k
    int64_t var;                                                           \
149
146k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
146k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
146k
    highbd_10_variance_sse2(                                               \
152
146k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
146k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
146k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
146k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
146k
  }                                                                        \
vpx_highbd_10_variance16x8_sse2
Line
Count
Source
146
9.88k
      int ref_stride, uint32_t *sse) {                                     \
147
9.88k
    int sum;                                                               \
148
9.88k
    int64_t var;                                                           \
149
9.88k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
9.88k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
9.88k
    highbd_10_variance_sse2(                                               \
152
9.88k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
9.88k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
9.88k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
9.88k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
9.88k
  }                                                                        \
vpx_highbd_10_variance8x16_sse2
Line
Count
Source
146
17.3k
      int ref_stride, uint32_t *sse) {                                     \
147
17.3k
    int sum;                                                               \
148
17.3k
    int64_t var;                                                           \
149
17.3k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
17.3k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
17.3k
    highbd_10_variance_sse2(                                               \
152
17.3k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
17.3k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
17.3k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
17.3k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
17.3k
  }                                                                        \
vpx_highbd_10_variance8x8_sse2
Line
Count
Source
146
482k
      int ref_stride, uint32_t *sse) {                                     \
147
482k
    int sum;                                                               \
148
482k
    int64_t var;                                                           \
149
482k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
150
482k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
151
482k
    highbd_10_variance_sse2(                                               \
152
482k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
153
482k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
154
482k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
155
482k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
156
482k
  }                                                                        \
157
                                                                           \
158
  uint32_t vpx_highbd_12_variance##w##x##h##_sse2(                         \
159
      const uint8_t *src8, int src_stride, const uint8_t *ref8,            \
160
1.68M
      int ref_stride, uint32_t *sse) {                                     \
161
1.68M
    int sum;                                                               \
162
1.68M
    int64_t var;                                                           \
163
1.68M
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
1.68M
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
1.68M
    highbd_12_variance_sse2(                                               \
166
1.68M
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
1.68M
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
1.68M
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
1.68M
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
1.68M
  }
vpx_highbd_12_variance64x64_sse2
Line
Count
Source
160
12.2k
      int ref_stride, uint32_t *sse) {                                     \
161
12.2k
    int sum;                                                               \
162
12.2k
    int64_t var;                                                           \
163
12.2k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
12.2k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
12.2k
    highbd_12_variance_sse2(                                               \
166
12.2k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
12.2k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
12.2k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
12.2k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
12.2k
  }
vpx_highbd_12_variance64x32_sse2
Line
Count
Source
160
2.73k
      int ref_stride, uint32_t *sse) {                                     \
161
2.73k
    int sum;                                                               \
162
2.73k
    int64_t var;                                                           \
163
2.73k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
2.73k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
2.73k
    highbd_12_variance_sse2(                                               \
166
2.73k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
2.73k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
2.73k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
2.73k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
2.73k
  }
vpx_highbd_12_variance32x64_sse2
Line
Count
Source
160
878
      int ref_stride, uint32_t *sse) {                                     \
161
878
    int sum;                                                               \
162
878
    int64_t var;                                                           \
163
878
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
878
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
878
    highbd_12_variance_sse2(                                               \
166
878
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
878
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
878
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
878
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
878
  }
vpx_highbd_12_variance32x32_sse2
Line
Count
Source
160
82.7k
      int ref_stride, uint32_t *sse) {                                     \
161
82.7k
    int sum;                                                               \
162
82.7k
    int64_t var;                                                           \
163
82.7k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
82.7k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
82.7k
    highbd_12_variance_sse2(                                               \
166
82.7k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
82.7k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
82.7k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
82.7k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
82.7k
  }
vpx_highbd_12_variance32x16_sse2
Line
Count
Source
160
10.4k
      int ref_stride, uint32_t *sse) {                                     \
161
10.4k
    int sum;                                                               \
162
10.4k
    int64_t var;                                                           \
163
10.4k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
10.4k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
10.4k
    highbd_12_variance_sse2(                                               \
166
10.4k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
10.4k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
10.4k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
10.4k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
10.4k
  }
vpx_highbd_12_variance16x32_sse2
Line
Count
Source
160
1.81k
      int ref_stride, uint32_t *sse) {                                     \
161
1.81k
    int sum;                                                               \
162
1.81k
    int64_t var;                                                           \
163
1.81k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
1.81k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
1.81k
    highbd_12_variance_sse2(                                               \
166
1.81k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
1.81k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
1.81k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
1.81k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
1.81k
  }
vpx_highbd_12_variance16x16_sse2
Line
Count
Source
160
271k
      int ref_stride, uint32_t *sse) {                                     \
161
271k
    int sum;                                                               \
162
271k
    int64_t var;                                                           \
163
271k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
271k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
271k
    highbd_12_variance_sse2(                                               \
166
271k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
271k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
271k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
271k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
271k
  }
vpx_highbd_12_variance16x8_sse2
Line
Count
Source
160
28.7k
      int ref_stride, uint32_t *sse) {                                     \
161
28.7k
    int sum;                                                               \
162
28.7k
    int64_t var;                                                           \
163
28.7k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
28.7k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
28.7k
    highbd_12_variance_sse2(                                               \
166
28.7k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
28.7k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
28.7k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
28.7k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
28.7k
  }
vpx_highbd_12_variance8x16_sse2
Line
Count
Source
160
15.1k
      int ref_stride, uint32_t *sse) {                                     \
161
15.1k
    int sum;                                                               \
162
15.1k
    int64_t var;                                                           \
163
15.1k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
15.1k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
15.1k
    highbd_12_variance_sse2(                                               \
166
15.1k
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
15.1k
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
15.1k
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
15.1k
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
15.1k
  }
vpx_highbd_12_variance8x8_sse2
Line
Count
Source
160
1.25M
      int ref_stride, uint32_t *sse) {                                     \
161
1.25M
    int sum;                                                               \
162
1.25M
    int64_t var;                                                           \
163
1.25M
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                             \
164
1.25M
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                             \
165
1.25M
    highbd_12_variance_sse2(                                               \
166
1.25M
        src, src_stride, ref, ref_stride, w, h, sse, &sum,                 \
167
1.25M
        vpx_highbd_calc##block_size##x##block_size##var_sse2, block_size); \
168
1.25M
    var = (int64_t)(*sse) - (((int64_t)sum * sum) >> (shift));             \
169
1.25M
    return (var >= 0) ? (uint32_t)var : 0;                                 \
170
1.25M
  }
171
172
VAR_FN(64, 64, 16, 12)
173
VAR_FN(64, 32, 16, 11)
174
VAR_FN(32, 64, 16, 11)
175
VAR_FN(32, 32, 16, 10)
176
VAR_FN(32, 16, 16, 9)
177
VAR_FN(16, 32, 16, 9)
178
VAR_FN(16, 16, 16, 8)
179
VAR_FN(16, 8, 8, 7)
180
VAR_FN(8, 16, 8, 7)
181
VAR_FN(8, 8, 8, 6)
182
183
#undef VAR_FN
184
185
unsigned int vpx_highbd_8_mse16x16_sse2(const uint8_t *src8, int src_stride,
186
                                        const uint8_t *ref8, int ref_stride,
187
0
                                        unsigned int *sse) {
188
0
  int sum;
189
0
  uint16_t *src = CONVERT_TO_SHORTPTR(src8);
190
0
  uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);
191
0
  highbd_8_variance_sse2(src, src_stride, ref, ref_stride, 16, 16, sse, &sum,
192
0
                         vpx_highbd_calc16x16var_sse2, 16);
193
0
  return *sse;
194
0
}
195
196
unsigned int vpx_highbd_10_mse16x16_sse2(const uint8_t *src8, int src_stride,
197
                                         const uint8_t *ref8, int ref_stride,
198
0
                                         unsigned int *sse) {
199
0
  int sum;
200
0
  uint16_t *src = CONVERT_TO_SHORTPTR(src8);
201
0
  uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);
202
0
  highbd_10_variance_sse2(src, src_stride, ref, ref_stride, 16, 16, sse, &sum,
203
0
                          vpx_highbd_calc16x16var_sse2, 16);
204
0
  return *sse;
205
0
}
206
207
unsigned int vpx_highbd_12_mse16x16_sse2(const uint8_t *src8, int src_stride,
208
                                         const uint8_t *ref8, int ref_stride,
209
0
                                         unsigned int *sse) {
210
0
  int sum;
211
0
  uint16_t *src = CONVERT_TO_SHORTPTR(src8);
212
0
  uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);
213
0
  highbd_12_variance_sse2(src, src_stride, ref, ref_stride, 16, 16, sse, &sum,
214
0
                          vpx_highbd_calc16x16var_sse2, 16);
215
0
  return *sse;
216
0
}
217
218
unsigned int vpx_highbd_8_mse8x8_sse2(const uint8_t *src8, int src_stride,
219
                                      const uint8_t *ref8, int ref_stride,
220
0
                                      unsigned int *sse) {
221
0
  int sum;
222
0
  uint16_t *src = CONVERT_TO_SHORTPTR(src8);
223
0
  uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);
224
0
  highbd_8_variance_sse2(src, src_stride, ref, ref_stride, 8, 8, sse, &sum,
225
0
                         vpx_highbd_calc8x8var_sse2, 8);
226
0
  return *sse;
227
0
}
228
229
unsigned int vpx_highbd_10_mse8x8_sse2(const uint8_t *src8, int src_stride,
230
                                       const uint8_t *ref8, int ref_stride,
231
0
                                       unsigned int *sse) {
232
0
  int sum;
233
0
  uint16_t *src = CONVERT_TO_SHORTPTR(src8);
234
0
  uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);
235
0
  highbd_10_variance_sse2(src, src_stride, ref, ref_stride, 8, 8, sse, &sum,
236
0
                          vpx_highbd_calc8x8var_sse2, 8);
237
0
  return *sse;
238
0
}
239
240
unsigned int vpx_highbd_12_mse8x8_sse2(const uint8_t *src8, int src_stride,
241
                                       const uint8_t *ref8, int ref_stride,
242
0
                                       unsigned int *sse) {
243
0
  int sum;
244
0
  uint16_t *src = CONVERT_TO_SHORTPTR(src8);
245
0
  uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);
246
0
  highbd_12_variance_sse2(src, src_stride, ref, ref_stride, 8, 8, sse, &sum,
247
0
                          vpx_highbd_calc8x8var_sse2, 8);
248
0
  return *sse;
249
0
}
250
251
// The 2 unused parameters are place holders for PIC enabled build.
252
// These definitions are for functions defined in
253
// highbd_subpel_variance_impl_sse2.asm
254
#define DECL(w, opt)                                                         \
255
  int vpx_highbd_sub_pixel_variance##w##xh_##opt(                            \
256
      const uint16_t *src, ptrdiff_t src_stride, int x_offset, int y_offset, \
257
      const uint16_t *ref, ptrdiff_t ref_stride, int height,                 \
258
      unsigned int *sse, void *unused0, void *unused);
259
#define DECLS(opt) \
260
  DECL(8, opt)     \
261
  DECL(16, opt)
262
263
DECLS(sse2)
264
265
#undef DECLS
266
#undef DECL
267
268
#define FN(w, h, wf, wlog2, hlog2, opt, cast)                                  \
269
  uint32_t vpx_highbd_8_sub_pixel_variance##w##x##h##_##opt(                   \
270
      const uint8_t *src8, int src_stride, int x_offset, int y_offset,         \
271
0
      const uint8_t *ref8, int ref_stride, uint32_t *sse_ptr) {                \
272
0
    uint32_t sse;                                                              \
273
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                 \
274
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                 \
275
0
    int se = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                      \
276
0
        src, src_stride, x_offset, y_offset, ref, ref_stride, h, &sse, NULL,   \
277
0
        NULL);                                                                 \
278
0
    if (w > wf) {                                                              \
279
0
      unsigned int sse2;                                                       \
280
0
      int se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                   \
281
0
          src + 16, src_stride, x_offset, y_offset, ref + 16, ref_stride, h,   \
282
0
          &sse2, NULL, NULL);                                                  \
283
0
      se += se2;                                                               \
284
0
      sse += sse2;                                                             \
285
0
      if (w > wf * 2) {                                                        \
286
0
        se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                     \
287
0
            src + 32, src_stride, x_offset, y_offset, ref + 32, ref_stride, h, \
288
0
            &sse2, NULL, NULL);                                                \
289
0
        se += se2;                                                             \
290
0
        sse += sse2;                                                           \
291
0
        se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                     \
292
0
            src + 48, src_stride, x_offset, y_offset, ref + 48, ref_stride, h, \
293
0
            &sse2, NULL, NULL);                                                \
294
0
        se += se2;                                                             \
295
0
        sse += sse2;                                                           \
296
0
      }                                                                        \
297
0
    }                                                                          \
298
0
    *sse_ptr = sse;                                                            \
299
0
    return sse - (uint32_t)((cast se * se) >> (wlog2 + hlog2));                \
300
0
  }                                                                            \
301
                                                                               \
302
  uint32_t vpx_highbd_10_sub_pixel_variance##w##x##h##_##opt(                  \
303
      const uint8_t *src8, int src_stride, int x_offset, int y_offset,         \
304
269k
      const uint8_t *ref8, int ref_stride, uint32_t *sse_ptr) {                \
305
269k
    int64_t var;                                                               \
306
269k
    uint32_t sse;                                                              \
307
269k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                 \
308
269k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                 \
309
269k
    int se = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                      \
310
269k
        src, src_stride, x_offset, y_offset, ref, ref_stride, h, &sse, NULL,   \
311
269k
        NULL);                                                                 \
312
269k
    if (w > wf) {                                                              \
313
66.0k
      uint32_t sse2;                                                           \
314
66.0k
      int se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                   \
315
66.0k
          src + 16, src_stride, x_offset, y_offset, ref + 16, ref_stride, h,   \
316
66.0k
          &sse2, NULL, NULL);                                                  \
317
66.0k
      se += se2;                                                               \
318
66.0k
      sse += sse2;                                                             \
319
66.0k
      if (w > wf * 2) {                                                        \
320
21.0k
        se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                     \
321
21.0k
            src + 32, src_stride, x_offset, y_offset, ref + 32, ref_stride, h, \
322
21.0k
            &sse2, NULL, NULL);                                                \
323
21.0k
        se += se2;                                                             \
324
21.0k
        sse += sse2;                                                           \
325
21.0k
        se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                     \
326
21.0k
            src + 48, src_stride, x_offset, y_offset, ref + 48, ref_stride, h, \
327
21.0k
            &sse2, NULL, NULL);                                                \
328
21.0k
        se += se2;                                                             \
329
21.0k
        sse += sse2;                                                           \
330
21.0k
      }                                                                        \
331
66.0k
    }                                                                          \
332
269k
    se = ROUND_POWER_OF_TWO(se, 2);                                            \
333
269k
    sse = ROUND_POWER_OF_TWO(sse, 4);                                          \
334
269k
    *sse_ptr = sse;                                                            \
335
269k
    var = (int64_t)(sse) - ((cast se * se) >> (wlog2 + hlog2));                \
336
269k
    return (var >= 0) ? (uint32_t)var : 0;                                     \
337
269k
  }                                                                            \
338
                                                                               \
339
  uint32_t vpx_highbd_12_sub_pixel_variance##w##x##h##_##opt(                  \
340
      const uint8_t *src8, int src_stride, int x_offset, int y_offset,         \
341
426k
      const uint8_t *ref8, int ref_stride, uint32_t *sse_ptr) {                \
342
426k
    int start_row;                                                             \
343
426k
    uint32_t sse;                                                              \
344
426k
    int se = 0;                                                                \
345
426k
    int64_t var;                                                               \
346
426k
    uint64_t long_sse = 0;                                                     \
347
426k
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                 \
348
426k
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                 \
349
893k
    for (start_row = 0; start_row < h; start_row += 16) {                      \
350
466k
      uint32_t sse2;                                                           \
351
466k
      int height = h - start_row < 16 ? h - start_row : 16;                    \
352
466k
      int se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                   \
353
466k
          src + (start_row * src_stride), src_stride, x_offset, y_offset,      \
354
466k
          ref + (start_row * ref_stride), ref_stride, height, &sse2, NULL,     \
355
466k
          NULL);                                                               \
356
466k
      se += se2;                                                               \
357
466k
      long_sse += sse2;                                                        \
358
466k
      if (w > wf) {                                                            \
359
64.9k
        se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                     \
360
64.9k
            src + 16 + (start_row * src_stride), src_stride, x_offset,         \
361
64.9k
            y_offset, ref + 16 + (start_row * ref_stride), ref_stride, height, \
362
64.9k
            &sse2, NULL, NULL);                                                \
363
64.9k
        se += se2;                                                             \
364
64.9k
        long_sse += sse2;                                                      \
365
64.9k
        if (w > wf * 2) {                                                      \
366
26.3k
          se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                   \
367
26.3k
              src + 32 + (start_row * src_stride), src_stride, x_offset,       \
368
26.3k
              y_offset, ref + 32 + (start_row * ref_stride), ref_stride,       \
369
26.3k
              height, &sse2, NULL, NULL);                                      \
370
26.3k
          se += se2;                                                           \
371
26.3k
          long_sse += sse2;                                                    \
372
26.3k
          se2 = vpx_highbd_sub_pixel_variance##wf##xh_##opt(                   \
373
26.3k
              src + 48 + (start_row * src_stride), src_stride, x_offset,       \
374
26.3k
              y_offset, ref + 48 + (start_row * ref_stride), ref_stride,       \
375
26.3k
              height, &sse2, NULL, NULL);                                      \
376
26.3k
          se += se2;                                                           \
377
26.3k
          long_sse += sse2;                                                    \
378
26.3k
        }                                                                      \
379
64.9k
      }                                                                        \
380
466k
    }                                                                          \
381
426k
    se = ROUND_POWER_OF_TWO(se, 4);                                            \
382
426k
    sse = (uint32_t)ROUND_POWER_OF_TWO(long_sse, 8);                           \
383
426k
    *sse_ptr = sse;                                                            \
384
426k
    var = (int64_t)(sse) - ((cast se * se) >> (wlog2 + hlog2));                \
385
426k
    return (var >= 0) ? (uint32_t)var : 0;                                     \
386
426k
  }
387
388
#define FNS(opt)                       \
389
  FN(64, 64, 16, 6, 6, opt, (int64_t)) \
390
  FN(64, 32, 16, 6, 5, opt, (int64_t)) \
391
  FN(32, 64, 16, 5, 6, opt, (int64_t)) \
392
  FN(32, 32, 16, 5, 5, opt, (int64_t)) \
393
  FN(32, 16, 16, 5, 4, opt, (int64_t)) \
394
  FN(16, 32, 16, 4, 5, opt, (int64_t)) \
395
  FN(16, 16, 16, 4, 4, opt, (int64_t)) \
396
  FN(16, 8, 16, 4, 3, opt, (int64_t))  \
397
  FN(8, 16, 8, 3, 4, opt, (int64_t))   \
398
  FN(8, 8, 8, 3, 3, opt, (int64_t))    \
399
  FN(8, 4, 8, 3, 2, opt, (int64_t))
400
401
1.92M
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance64x64_sse2
vpx_highbd_10_sub_pixel_variance64x64_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance64x64_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance64x32_sse2
vpx_highbd_10_sub_pixel_variance64x32_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance64x32_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance32x64_sse2
vpx_highbd_10_sub_pixel_variance32x64_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance32x64_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance32x32_sse2
vpx_highbd_10_sub_pixel_variance32x32_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance32x32_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance32x16_sse2
vpx_highbd_10_sub_pixel_variance32x16_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance32x16_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance16x32_sse2
vpx_highbd_10_sub_pixel_variance16x32_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance16x32_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance16x16_sse2
vpx_highbd_10_sub_pixel_variance16x16_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance16x16_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance16x8_sse2
vpx_highbd_10_sub_pixel_variance16x8_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance16x8_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance8x16_sse2
vpx_highbd_10_sub_pixel_variance8x16_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance8x16_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance8x8_sse2
vpx_highbd_10_sub_pixel_variance8x8_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance8x8_sse2
Line
Count
Source
401
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_variance8x4_sse2
vpx_highbd_10_sub_pixel_variance8x4_sse2
Line
Count
Source
401
FNS(sse2)
vpx_highbd_12_sub_pixel_variance8x4_sse2
Line
Count
Source
401
FNS(sse2)
402
1.92M
403
1.92M
#undef FNS
404
1.92M
#undef FN
405
1.92M
406
1.92M
// The 2 unused parameters are place holders for PIC enabled build.
407
1.92M
#define DECL(w, opt)                                                         \
408
1.92M
  int vpx_highbd_sub_pixel_avg_variance##w##xh_##opt(                        \
409
1.92M
      const uint16_t *src, ptrdiff_t src_stride, int x_offset, int y_offset, \
410
1.92M
      const uint16_t *ref, ptrdiff_t ref_stride, const uint16_t *second,     \
411
1.92M
      ptrdiff_t second_stride, int height, unsigned int *sse, void *unused0, \
412
1.92M
      void *unused);
413
1.92M
#define DECLS(opt1) \
414
1.92M
  DECL(16, opt1)    \
415
1.92M
  DECL(8, opt1)
416
1.92M
417
1.92M
DECLS(sse2)
418
1.92M
#undef DECL
419
1.92M
#undef DECLS
420
1.92M
421
1.92M
#define FN(w, h, wf, wlog2, hlog2, opt, cast)                                  \
422
1.92M
  uint32_t vpx_highbd_8_sub_pixel_avg_variance##w##x##h##_##opt(               \
423
1.92M
      const uint8_t *src8, int src_stride, int x_offset, int y_offset,         \
424
1.92M
      const uint8_t *ref8, int ref_stride, uint32_t *sse_ptr,                  \
425
1.92M
      const uint8_t *sec8) {                                                   \
426
0
    uint32_t sse;                                                              \
427
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                 \
428
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                 \
429
0
    uint16_t *sec = CONVERT_TO_SHORTPTR(sec8);                                 \
430
0
    int se = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(                  \
431
0
        src, src_stride, x_offset, y_offset, ref, ref_stride, sec, w, h, &sse, \
432
0
        NULL, NULL);                                                           \
433
0
    if (w > wf) {                                                              \
434
0
      uint32_t sse2;                                                           \
435
0
      int se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(               \
436
0
          src + 16, src_stride, x_offset, y_offset, ref + 16, ref_stride,      \
437
0
          sec + 16, w, h, &sse2, NULL, NULL);                                  \
438
0
      se += se2;                                                               \
439
0
      sse += sse2;                                                             \
440
0
      if (w > wf * 2) {                                                        \
441
0
        se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(                 \
442
0
            src + 32, src_stride, x_offset, y_offset, ref + 32, ref_stride,    \
443
0
            sec + 32, w, h, &sse2, NULL, NULL);                                \
444
0
        se += se2;                                                             \
445
0
        sse += sse2;                                                           \
446
0
        se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(                 \
447
0
            src + 48, src_stride, x_offset, y_offset, ref + 48, ref_stride,    \
448
0
            sec + 48, w, h, &sse2, NULL, NULL);                                \
449
0
        se += se2;                                                             \
450
0
        sse += sse2;                                                           \
451
0
      }                                                                        \
452
0
    }                                                                          \
453
0
    *sse_ptr = sse;                                                            \
454
0
    return sse - (uint32_t)((cast se * se) >> (wlog2 + hlog2));                \
455
0
  }                                                                            \
456
                                                                               \
457
  uint32_t vpx_highbd_10_sub_pixel_avg_variance##w##x##h##_##opt(              \
458
      const uint8_t *src8, int src_stride, int x_offset, int y_offset,         \
459
      const uint8_t *ref8, int ref_stride, uint32_t *sse_ptr,                  \
460
0
      const uint8_t *sec8) {                                                   \
461
0
    int64_t var;                                                               \
462
0
    uint32_t sse;                                                              \
463
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                 \
464
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                 \
465
0
    uint16_t *sec = CONVERT_TO_SHORTPTR(sec8);                                 \
466
0
    int se = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(                  \
467
0
        src, src_stride, x_offset, y_offset, ref, ref_stride, sec, w, h, &sse, \
468
0
        NULL, NULL);                                                           \
469
0
    if (w > wf) {                                                              \
470
0
      uint32_t sse2;                                                           \
471
0
      int se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(               \
472
0
          src + 16, src_stride, x_offset, y_offset, ref + 16, ref_stride,      \
473
0
          sec + 16, w, h, &sse2, NULL, NULL);                                  \
474
0
      se += se2;                                                               \
475
0
      sse += sse2;                                                             \
476
0
      if (w > wf * 2) {                                                        \
477
0
        se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(                 \
478
0
            src + 32, src_stride, x_offset, y_offset, ref + 32, ref_stride,    \
479
0
            sec + 32, w, h, &sse2, NULL, NULL);                                \
480
0
        se += se2;                                                             \
481
0
        sse += sse2;                                                           \
482
0
        se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(                 \
483
0
            src + 48, src_stride, x_offset, y_offset, ref + 48, ref_stride,    \
484
0
            sec + 48, w, h, &sse2, NULL, NULL);                                \
485
0
        se += se2;                                                             \
486
0
        sse += sse2;                                                           \
487
0
      }                                                                        \
488
0
    }                                                                          \
489
0
    se = ROUND_POWER_OF_TWO(se, 2);                                            \
490
0
    sse = ROUND_POWER_OF_TWO(sse, 4);                                          \
491
0
    *sse_ptr = sse;                                                            \
492
0
    var = (int64_t)(sse) - ((cast se * se) >> (wlog2 + hlog2));                \
493
0
    return (var >= 0) ? (uint32_t)var : 0;                                     \
494
0
  }                                                                            \
495
                                                                               \
496
  uint32_t vpx_highbd_12_sub_pixel_avg_variance##w##x##h##_##opt(              \
497
      const uint8_t *src8, int src_stride, int x_offset, int y_offset,         \
498
      const uint8_t *ref8, int ref_stride, uint32_t *sse_ptr,                  \
499
0
      const uint8_t *sec8) {                                                   \
500
0
    int start_row;                                                             \
501
0
    int64_t var;                                                               \
502
0
    uint32_t sse;                                                              \
503
0
    int se = 0;                                                                \
504
0
    uint64_t long_sse = 0;                                                     \
505
0
    uint16_t *src = CONVERT_TO_SHORTPTR(src8);                                 \
506
0
    uint16_t *ref = CONVERT_TO_SHORTPTR(ref8);                                 \
507
0
    uint16_t *sec = CONVERT_TO_SHORTPTR(sec8);                                 \
508
0
    for (start_row = 0; start_row < h; start_row += 16) {                      \
509
0
      uint32_t sse2;                                                           \
510
0
      int height = h - start_row < 16 ? h - start_row : 16;                    \
511
0
      int se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(               \
512
0
          src + (start_row * src_stride), src_stride, x_offset, y_offset,      \
513
0
          ref + (start_row * ref_stride), ref_stride, sec + (start_row * w),   \
514
0
          w, height, &sse2, NULL, NULL);                                       \
515
0
      se += se2;                                                               \
516
0
      long_sse += sse2;                                                        \
517
0
      if (w > wf) {                                                            \
518
0
        se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(                 \
519
0
            src + 16 + (start_row * src_stride), src_stride, x_offset,         \
520
0
            y_offset, ref + 16 + (start_row * ref_stride), ref_stride,         \
521
0
            sec + 16 + (start_row * w), w, height, &sse2, NULL, NULL);         \
522
0
        se += se2;                                                             \
523
0
        long_sse += sse2;                                                      \
524
0
        if (w > wf * 2) {                                                      \
525
0
          se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(               \
526
0
              src + 32 + (start_row * src_stride), src_stride, x_offset,       \
527
0
              y_offset, ref + 32 + (start_row * ref_stride), ref_stride,       \
528
0
              sec + 32 + (start_row * w), w, height, &sse2, NULL, NULL);       \
529
0
          se += se2;                                                           \
530
0
          long_sse += sse2;                                                    \
531
0
          se2 = vpx_highbd_sub_pixel_avg_variance##wf##xh_##opt(               \
532
0
              src + 48 + (start_row * src_stride), src_stride, x_offset,       \
533
0
              y_offset, ref + 48 + (start_row * ref_stride), ref_stride,       \
534
0
              sec + 48 + (start_row * w), w, height, &sse2, NULL, NULL);       \
535
0
          se += se2;                                                           \
536
0
          long_sse += sse2;                                                    \
537
0
        }                                                                      \
538
0
      }                                                                        \
539
0
    }                                                                          \
540
0
    se = ROUND_POWER_OF_TWO(se, 4);                                            \
541
0
    sse = (uint32_t)ROUND_POWER_OF_TWO(long_sse, 8);                           \
542
0
    *sse_ptr = sse;                                                            \
543
0
    var = (int64_t)(sse) - ((cast se * se) >> (wlog2 + hlog2));                \
544
0
    return (var >= 0) ? (uint32_t)var : 0;                                     \
545
0
  }
546
547
#define FNS(opt1)                       \
548
  FN(64, 64, 16, 6, 6, opt1, (int64_t)) \
549
  FN(64, 32, 16, 6, 5, opt1, (int64_t)) \
550
  FN(32, 64, 16, 5, 6, opt1, (int64_t)) \
551
  FN(32, 32, 16, 5, 5, opt1, (int64_t)) \
552
  FN(32, 16, 16, 5, 4, opt1, (int64_t)) \
553
  FN(16, 32, 16, 4, 5, opt1, (int64_t)) \
554
  FN(16, 16, 16, 4, 4, opt1, (int64_t)) \
555
  FN(16, 8, 16, 4, 3, opt1, (int64_t))  \
556
  FN(8, 16, 8, 4, 3, opt1, (int64_t))   \
557
  FN(8, 8, 8, 3, 3, opt1, (int64_t))    \
558
  FN(8, 4, 8, 3, 2, opt1, (int64_t))
559
560
0
FNS(sse2)
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance64x64_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance64x64_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance64x64_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance64x32_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance64x32_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance64x32_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance32x64_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance32x64_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance32x64_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance32x32_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance32x32_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance32x32_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance32x16_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance32x16_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance32x16_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance16x32_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance16x32_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance16x32_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance16x16_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance16x16_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance16x16_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance16x8_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance16x8_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance16x8_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance8x16_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance8x16_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance8x16_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance8x8_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance8x8_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance8x8_sse2
Unexecuted instantiation: vpx_highbd_8_sub_pixel_avg_variance8x4_sse2
Unexecuted instantiation: vpx_highbd_10_sub_pixel_avg_variance8x4_sse2
Unexecuted instantiation: vpx_highbd_12_sub_pixel_avg_variance8x4_sse2
561
0
562
0
#undef FNS
563
0
#undef FN
564
0
#endif  // HAVE_X86_ASM
565
0
566
0
void vpx_highbd_comp_avg_pred_sse2(uint16_t *comp_pred, const uint16_t *pred,
567
0
                                   int width, int height, const uint16_t *ref,
568
0
                                   int ref_stride) {
569
0
  int i, j;
570
0
  if (width > 8) {
571
0
    for (i = 0; i < height; ++i) {
572
0
      for (j = 0; j < width; j += 16) {
573
0
        const __m128i p0 = _mm_loadu_si128((const __m128i *)&pred[j]);
574
0
        const __m128i p1 = _mm_loadu_si128((const __m128i *)&pred[j + 8]);
575
0
        const __m128i r0 = _mm_loadu_si128((const __m128i *)&ref[j]);
576
0
        const __m128i r1 = _mm_loadu_si128((const __m128i *)&ref[j + 8]);
577
0
        _mm_storeu_si128((__m128i *)&comp_pred[j], _mm_avg_epu16(p0, r0));
578
0
        _mm_storeu_si128((__m128i *)&comp_pred[j + 8], _mm_avg_epu16(p1, r1));
579
0
      }
580
0
      comp_pred += width;
581
0
      pred += width;
582
0
      ref += ref_stride;
583
0
    }
584
0
  } else if (width == 8) {
585
0
    for (i = 0; i < height; i += 2) {
586
0
      const __m128i p0 = _mm_loadu_si128((const __m128i *)&pred[0]);
587
0
      const __m128i p1 = _mm_loadu_si128((const __m128i *)&pred[8]);
588
0
      const __m128i r0 = _mm_loadu_si128((const __m128i *)&ref[0]);
589
0
      const __m128i r1 = _mm_loadu_si128((const __m128i *)&ref[ref_stride]);
590
0
      _mm_storeu_si128((__m128i *)&comp_pred[0], _mm_avg_epu16(p0, r0));
591
0
      _mm_storeu_si128((__m128i *)&comp_pred[8], _mm_avg_epu16(p1, r1));
592
0
      comp_pred += 8 << 1;
593
0
      pred += 8 << 1;
594
0
      ref += ref_stride << 1;
595
0
    }
596
0
  } else {
597
0
    assert(width == 4);
598
0
    for (i = 0; i < height; i += 2) {
599
0
      const __m128i p0 = _mm_loadl_epi64((const __m128i *)&pred[0]);
600
0
      const __m128i p1 = _mm_loadl_epi64((const __m128i *)&pred[4]);
601
0
      const __m128i r0 = _mm_loadl_epi64((const __m128i *)&ref[0]);
602
0
      const __m128i r1 = _mm_loadl_epi64((const __m128i *)&ref[ref_stride]);
603
0
      _mm_storel_epi64((__m128i *)&comp_pred[0], _mm_avg_epu16(p0, r0));
604
0
      _mm_storel_epi64((__m128i *)&comp_pred[4], _mm_avg_epu16(p1, r1));
605
0
      comp_pred += 4 << 1;
606
0
      pred += 4 << 1;
607
0
      ref += ref_stride << 1;
608
0
    }
609
0
  }
610
0
}